自己的线程中的Android服务与app进程一起被杀死

时间:2016-06-03 11:34:26

标签: java android multithreading service process

我在清单中声明了一个服务,如

        <service android:name=".services.ScreenOnService" android:process="@string/screenProcess"/>

所有服务都注册了Screen_on广播(因为我总是需要打开屏幕的信息,而不仅仅是我的应用程序正在运行)

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

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    //All this service has to do is register for the screen on broadcast
    //as this one can't be registere in manifest and the ACTION_USER_PRESENT is
    //not guaranteed to be fired. (E.g. if no lock screen is used)
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    registerReceiver(screenEventReceiver,filter);
    return START_STICKY;
}

@Override
public void onDestroy()
{
    unregisterReceiver(screenEventReceiver);
    super.onDestroy();
}

我从我的Application onCreate

启动服务
@Override
public void onCreate() {
    super.onCreate();
    if(!isScreenOnServiceAlreadyRunning())
    {
        //Start the screen on service
        Intent screenOnService = new Intent(this, ScreenOnService.class);
        startService(screenOnService);
    }
}

只要应用程序正在运行,一切都很好。如果我杀了应用程序,它自己的进程中的服务也会被杀死,我不明白为什么。

我在这里发现了一篇很有前途的文章http://fabcirablog.weebly.com/blog/creating-a-never-ending-background-service-in-android并希望最好,但即使我这样做并发送广播,它也行不通。

如果应用被杀,为什么服务会停止工作?我认为它会继续运行,就像它自己的流程一样。如果用我的方法无法实现我想要的东西,那么最好的方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

@Hardcore_Graverobber我认为您应该将服务作为一个单独的流程启动,

请参阅本教程    http://www.vogella.com/tutorials/AndroidServices/article.html