Android 服务意外关闭

标签 android service broadcastreceiver

我有一个带有 BroadcastReceiver 的服务,它通过方法“exampleMethod()”与 Activity 通信。该服务启动并正常工作,但过了一会儿它被 Android 停止,我必须重新启动它。能保证服务不会长时间停止吗?

public class SMS_Service extends Service{
    private BroadcastReceiver rec_sms = new BroadcastReceiver() {   
        @Override
        public void onReceive(Context context, Intent intent) {
               MainActivity.exampleMethod();
        }
    };

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return START_STICKY;
    }

最佳答案

after a while Service is stopped by Android

首先重要的是你的服务为什么被android系统停止,

当用户直接与该进程的组件(即 Activity )交互时,Android 会非常努力地保持该进程运行,除非在特殊情况下,否则您不会看到它被杀死。

  • 如果是内存不足,那就没办法了。当为了内存而杀死某些东西时,整个进程(包括应用程序对象)都被杀死,此时没有代码在其中执行。

  • 如果服务只是因为不再需要运行而被销毁,它的 onDestroy() 将被调用,当稍后需要该服务时,将创建一个新实例并调用 onCreate()。

Is it possible to make sure that the service is not stopped for a long time?

这是不可能的。您可以获得的最接近的方法是通过 startForeground(),但即使这样也不能保证您的服务将永远存在。

此外,这是 Android 中一个严重的反模式。用户讨厌试图永远运行的应用程序,这就是为什么我们必须与任务 killer 等进行斗争。

关于Android 服务意外关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13890343/

相关文章:

android - finishactivity 未完成当前 Activity

Android:如何知道设备何时锁定和解锁

android - 为什么我们不为 BOOT_COMPLETED 事件注册广播接收器

android - 结合 localbroadcastmanager sendorderedbroadcast 发送广播

Android 服务在启动时不起作用

java - 在android中后台访问麦克风

Android - 运行扩展 BaseAdapter 的 ListView 时出现空指针异常

android - Activity 的昏暗背景

android - 查看 DDMS 中的服务

java - 为什么对服务对象有静态弱引用?