How to keep a Service alive?

烂漫一生 提交于 2019-12-01 09:42:41

Service with START_STICKY in retrun onStartCommand() will start again automatically you dont need to start it again in onDestroy()

    @Override
    public void onDestroy() {

      //  startService(new Intent(this, AppLifeService.class));
        super.onDestroy();

    }

You need to create a Service to "reopen" BroadcastService automatically when it's closed.

For example:

BroadcastService

public class MyBroadcastService extends BroadcastReceiver
{

 @Override
    public void onReceive(final Context context, Intent intent)
    {
     //do something
    }
}

Service to "reopen" automatically

public class MyService extends Service
{

@Override
    public void onCreate()
    {
        // Handler will get associated with the current thread,
        // which is the main thread.
        super.onCreate();
        ctx = this;

    }

 @Override
    public IBinder onBind(Intent arg0)
    {
        // TODO Auto-generated method stub

        return null;
    }

@Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        Log.i(TAG, "onStartCommand");
        //Toast.makeText(this, "onStartCommand", Toast.LENGTH_LONG).show();

        return START_STICKY;
    }

//launch when its closed
@Override
    public void onDestroy()
    {
        super.onDestroy();
        sendBroadcast(new Intent("YouWillNeverKillMe"));
        Toast.makeText(this, "YouWillNeverKillMe TOAST!!", Toast.LENGTH_LONG).show();
    }
}

Declare on your AndroidManifest.XML

<receiver android:name=".BroadcastServicesBackground.MyBroadcastService">
            <intent-filter>
                <!--That name (YouWillNeverKillMe) you wrote on Myservice-->
                <action android:name="YouWillNeverKillMe"/>

                <data android:scheme="package"/>
            </intent-filter>
            <intent-filter>
                 <!--To launch on device boot-->
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

        <service android:name=".Services.MyService"/>

@Sohail Zahid Answer tells you a way to repeatedly start a service again and again when stopped. But in order to keep a service alive like playing a song in a background.

The best Approach I found is

startForeground(int, Notification)

where int value must be unique for every notification

You'll need to supply a Notification to the method which is displayed in the Notifications Bar in the Ongoing section. In this way the app will keep alive in background without any interuption.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!