Android暂停广播接收器

use*_*138 0 multithreading android broadcastreceiver

我的应用程序中有一个广播接收器,等待屏幕打开/关闭.我想做的是:

public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        pause some seconds...
        ...do something
    }
}
Run Code Online (Sandbox Code Playgroud)

如何将当前线程停止到onReceive方法?

Bud*_*ius 5

你不能,你不应该暂停BrodcastReceiver postRelayed到Handler();

你不应该阻止它,因为该线程需要做其他的东西,所以不要阻止它,因为它是一个糟糕的设计.

并且你不能postDelay因为从文档:

从onReceive()返回后,BroadcastReceiver不再处于活动状态,其托管进程与其中运行的任何其他应用程序组件一样重要.这一点尤其重要,因为如果该进程只托管BroadcastReceiver(用户从未或最近没有与之交互的应用程序的常见情况),那么从onReceive()返回时,系统会认为其进程为空并且积极地杀死它使资源可用于其他更重要的过程.

这意味着它从onReceive()返回的那一刻所有这些很可能会很快被杀死.

如果你想在广播后的某个时间发生某些事情你可以开始服务,并且该服务等待一段时间,或者如果你想要等待的时间长于几秒钟,你应该只是推出在AlarmManager中使用此服务,让AlarmManager为您启动服务.