0

我有一个带有以下 onCreate() 的 Activity。

我想要的是只有在这个特定的Activity中,检测屏幕是锁定还是解锁,并相应地执行某些事情。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_USER_PRESENT);
    receiver = new ScreenLockListener();
    registerReceiver(receiver, filter);

    setFragment(new CamcorderFragment().setBundle(getIntent().getExtras()), false);
}

由于上述三个动作只能被Java代码注册的接收器接收(不在AndroidManifest.xml中),我想知道我应该何时注册和注销上述接收器。

如果我在 onCreate() 中注册而不是取消注册,它工作正常。

如果我在 onCreate() 中注册并在 onDestroy() 中取消注册,则它的行为不正确,因为在活动中执行 onDestroy() 和下一个 onCreate() 之间没有接收器。

如果我只在 onCreate 中注册同一个接收者而不取消注册,可以吗?它会影响内存管理吗?

如果我错了,我应该在哪里注册和取消注册只要用户不离开这个 Activity 就会存活的接收器(即使 onCreate 和 onDestory 会被调用多次?)

谢谢!

4

1 回答 1

0

您应该在 中注册过滤器onResume()并在 中取消注册onPause()。在注销时onPause()检查活动是否以 . 结束isFinishing()

但是,在某些情况下,用户可能会通过按主页按钮离开您的应用程序,在这种情况下会isFinishing()返回false. 为了处理这种情况,也取消注册过滤器onDestroy(),只要确保抓住IllegalArgumentException那里。

于 2013-10-08T06:17:11.637 回答