В моем приложении у меня есть BroadcastReceiver
, который выглядит примерно так:BroadcastReceiver не сохраняет локальную переменную
public class MyBroadcastReceiver extends BroadcastReceiver
{
public static final String CUSTOM_BROADCAST_1 = "com.cilenco.application1";
public static final String CUSTOM_BROADCAST_2 = "com.cilenco.application2";
private boolean lastState = false;
@Override
public void onReceive(Context context, Intent intent)
{
final String action = intent.getAction();
boolean cb1 = CUSTOM_BROADCAST_1.equals(action);
boolean cb2 = CUSTOM_BROADCAST_2.equals(action);
if(cb1) lastState = true;
else if(cb2) lastState = false;
Toast.makeText(context, "" + lastState, Toast.LENGTH_LONG).show();
}
}
Теперь моя проблема заключается в том, что каждый раз, когда я получаю Broadcast переменная lastState
всегда находится ложь. Я уверен, что метод onReceive
вызывается правильно. У вас есть идеи, почему это так? Для меня это похоже, что BroadcastReceiver повторно инициализирует каждый раз, когда получает широковещательную передачу. Правильно ли, и если да, то как я могу избежать этой проблемы? Мой BroadcastReceiver
зарегистрированный в манифесте, как это:
<receiver
android:name="service.MyBroadcastReceiver"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="com.cilenco.application1"/>
<action android:name="com.cilenco.application2"/>
</intent-filter>
</receiver>
Даже статический не поможет, так как это очень вероятно, что процесс будет прекращен между трансляциями. Статические члены данных - это только кеш. Все, что должно выдержать завершение процесса, должно быть записано на диск. – CommonsWare
Внимание, CommonsWare - это правильно. – TiagoPereira17
Благодарим вас за эту информацию и в комментариях. Так что я должен написать, например, в «SharedPreferences»? Будет за исключением 10 минут – Cilenco