keeping background service alive after user exit a

2019-01-18 04:59发布

I'm trying to create a service that will do background jobs for me even after the user closes the app from the running processes menu(by shifting process out of the screen).

What I tried to do is create service in a different process by declaring it like this:

  <service
        android:name=".service.Service"
        android:enabled="true"
        android:icon="@drawable/ic_launcher"
        android:process=":my_process" >
  </service>

and the onStartCommand() is:

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

4条回答
萌系小妹纸
2楼-- · 2019-01-18 05:33

Actually there are different kinds of services you can implement. Use a Service instead of IntentService. There you need to look at START_STICKY , START_NOT_STICKY and START_REDELIVER_INTENT you can keep your service running in background even if your activity dies. Android services also look at AIDL services

查看更多
可以哭但决不认输i
3楼-- · 2019-01-18 05:33

Services were designed to run in the background, no need for a different process.

From the services documentation:

Once started, a service can run in the background indefinitely, even if the component that started it, is destroyed.

The service however, should stop itself, when its work is done. IntentService is the easiest way to start implementing a service.

查看更多
迷人小祖宗
4楼-- · 2019-01-18 05:41

According to the Android documentation you can achieve this behavior by using the attribute:

 android:isolatedProcess="true"

By the way, I know that it's not answering the question but it might help some people as well - lately, I found out about a great third-party lib that Evernote developers have created. Its name is Android-Job and its aim is to create jobs that run on different processes and can become active again even after a device reboot, it's amazing.

查看更多
叼着烟拽天下
5楼-- · 2019-01-18 05:43

For this you can use Handler and Runnable class

   @Override
    public void onCreate()
    {

        Toast.makeText(context, "SMS SERVICE START", Toast.LENGTH_SHORT).show();


        handler=new Handler();
        runnable=new Runnable() {
            @Override
            public void run()
            {

                    TASK();
                    handler.postDelayed(runnable,180000);
// 3min delay
            }
        };

        handler.postDelayed(runnable,180000);
        super.onCreate();
    }

This task run continuously 3min

public void TASK()
{
     //your task 

}
查看更多
登录 后发表回答