我正在处理的android应用程序涉及两个活动(父(P)和子(C))。问题是在配置文件切换(例如从正常模式到受限配置文件模式)时,父活动被一个包杀死我们依赖它,即尽管Android不建议在配置文件切换时终止活动,但我们有一个要求,所以我们必须这样做。因此,在这种情况下,我们也希望在配置文件切换的情况下完成子活动。我已经完成了如何检测用户之间的切换并且看到当我将子活动作为独立活动启动时,这可以完美地检测到配置文件切换。但实际要求是当父活动通过意图启动子活动时。在这种情况下,它根本不会检测到配置文件切换。PS:我知道 system.exit 不应该在 Android 应用程序中使用,但这是一个要求,因为父活动在配置文件切换的情况下执行此操作。我这里也有另一个查询,因为 system.exit(0) 是为父活动完成的,它不应该杀死整个过程吗?这不意味着它也会杀死孩子的活动吗?但事实并非如此!我能以某种方式实现这一目标吗?如果可能的话,那么我根本不需要儿童活动的接收器。编码 :
public class ProfileSwitchApplicationKiller extends BroadcastReceiver {
private static final String TAG = "UserSwitchReceiver";
@Override
public void onReceive(Context context, Intent intent) {
boolean userSentBackground = intent.getAction().equals(Intent.ACTION_USER_BACKGROUND);
boolean userSentForeground = intent.getAction().equals(Intent.ACTION_USER_FOREGROUND);
Log.d(TAG, "Switch received. User sent background = " + userSentBackground
+ "; User sent foreground = " + userSentForeground + ";");
System.exit(0);
}
}
我已经在 onResume/onCreate/onStart 等各个地方注册了接收器,但控制永远不会到达配置文件切换接收器,即使它在从父活动启动子活动时到达 onResume。我注册接收器的方式是:
ProfileSwitchApplicationKiller receiver = new ProfileSwitchApplicationKiller();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_BACKGROUND);
filter.addAction(Intent.ACTION_USER_FOREGROUND);
Log.e("Shyamam", "Registering Receiver");
registerReceiver(receiver, filter);
我没有取消注册接收器。这是必需品吗?我尝试在 onStart 中注册接收器并在 onStop 中取消注册,但在这种情况下,应用程序从未检测到配置文件切换。