首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >永恒的BroadcastReceiver

永恒的BroadcastReceiver
EN

Stack Overflow用户
提问于 2012-06-10 19:53:58
回答 1查看 153关注 0票数 1

我对我正在编写的应用程序有问题。

我需要在每次广播时接收ACTION_SCREEN_ON、ACTION_SCREEN_OFF和ACTION_USER_PRESENT意图,所以我的应用程序当然会留在后台。目前,我的应用程序是由设置活动和服务组成的。ScreenReceiver是一个获取ACTION_SCREEN_*意图的BroadcastReceiver,而UnlockReceiver获取ACTION_USER_PRESENT意图。该服务注册和注销接收器:

代码语言:javascript
复制
public class MainService extends Service {
    ScreenReceiver screenReceiver = null;
    UnlockReceiver unlockReceiver = null;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onStart(Intent intent, int startId) {
        doStart();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        doStart();

        return START_STICKY;
    }

    public void doStart() {
        if(screenReceiver != null && unlockReceiver != null)
            return;

        IntentFilter filter;

        if(screenReceiver == null) {
            filter = new IntentFilter();
            filter.addAction(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_SCREEN_OFF);

            screenReceiver = new ScreenReceiver();
            registerReceiver(screenReceiver, filter);
        }

        if(unlockReceiver == null) {
            filter = new IntentFilter();
            filter.addAction(Intent.ACTION_USER_PRESENT);

            unlockReceiver = new UnlockReceiver();
            registerReceiver(unlockReceiver, filter);
        }
    }

    @Override
    public void onDestroy() {
        if(screenReceiver != null)
            unregisterReceiver(screenReceiver);

        if(unlockReceiver != null)
            unregisterReceiver(unlockReceiver);
    }
}  

但有时Android会杀死我的服务来释放一些RAM,然后重启它。杀死和重生之间的时间通常在5秒左右,但有时这足以让我的应用程序的用户忽略一些给用户带来问题的意图。这些意图只能被注册为them,所以我不能在清单中注册它们。我如何才能在不被杀死或遗漏的情况下倾听这些意图呢?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-10 20:00:08

我如何才能在不被杀死或遗漏的情况下听到这些意图?

你不需要。你可以重写你的应用,要么不使用这些广播,要么在丢失广播的情况下更具弹性。毕竟,这不仅仅是"Android杀死我的服务来释放一些RAM,然后重新启动它“,而是任务管理器和类似的可以摆脱你的服务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10968443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档