Android broadCastReceiver 的生命周期

Life Span of Android broadCastReceiver

我的 Android BroadCastReciver 中有实例变量。接收器是通过清单文件定义的。

例如这样的事情:

public class MyPhoneStateReceiver extends BroadcastReceiver {

String myString="string one";


@Override
public void onReceive(Context context, Intent intent) {

myString= "string two";

}

//这是清单定义

<receiver android:name="mypackage.receivers.MyPhoneStateReceiver" android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
                <action android:name="android.intent.action.PHONE_STATE" />
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

现在假设我收到了第一个意图,现在 myString 变量将是两个。但是在我收到的下一个事件中,我的实例变量会被记住还是用 "string one" 开始初始化。所以我真正要问的是 broadcastReciever 是在每次发生新事件时实例化还是保持其状态?另外,如果它可能会丢失状态,那么重启还能使它丢失状态吗?

...is the broadcastReciever instantiated everytime a new event occurs or does it keep its state ?

将为注册接收的每个广播创建 BroadcastReceiver class 的新实例。您的 myString 变量将被初始化为 "string one",并且在每次 onReceive() 执行开始时将具有该值。

Also if it can lose state what other then a reboot could make it lose state ?

我不太确定你在这里的意思,但是任何非 static 成员都不会在实例之间保留状态,就像任何其他对象 class 一样。 static 成员可以在广播之间保留状态,但您不应该依赖它,因为您的进程随时可能被终止。相反,使用某种形式的持久存储,例如 SharedPreferences 或标准 Files.