Android 应用程序死机时如何运行服务?

Android 应用程序死机时如何运行服务?,android,Android,我想运行我的服务,即使应用程序被后台任务杀死。谁能给我一些建议吗。 (当我最小化应用程序时,工作正常) 这是我的代码: public class MyService extends Service { private BroadcastReceiver mReceiver = null; public MyService() { } @Override public IBinder onBind(Intent intent) { // T

我想运行我的服务,即使应用程序被后台任务杀死。谁能给我一些建议吗。 (当我最小化应用程序时,工作正常)

这是我的代码:

public class MyService extends Service {
    private BroadcastReceiver mReceiver = null;
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
    @Override
    public void onCreate() {
        final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        mReceiver = new ScreenReceiver();
        registerReceiver(mReceiver, filter);
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
            if (ScreenReceiver.wasScreenOn) {
           Log.e("MYAPP", "SCREEN TURNED OFF");

            } else {
            // this is when onPause() is called when the screen state has not changed
        }
        return START_STICKY;   
       }

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

一旦服务被系统或用户终止,您需要重新启动该服务

一旦服务被系统或用户终止,您需要重新启动该服务
如果您的服务是由应用程序启动的,那么实际上您的服务是在主进程上运行的。所以,当应用程序被终止时,服务也将停止。因此,您可以通过
onTaskRemoved
方法发送广播,如下所示:

public class MyService extends Service {
    private BroadcastReceiver mReceiver = null;
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
    @Override
    public void onCreate() {
        final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        mReceiver = new ScreenReceiver();
        registerReceiver(mReceiver, filter);
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
            if (ScreenReceiver.wasScreenOn) {
           Log.e("MYAPP", "SCREEN TURNED OFF");

            } else {
            // this is when onPause() is called when the screen state has not changed
        }
        return START_STICKY;   
       }

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

        @Override public void onTaskRemoved(Intent rootIntent){
              Intent intent = new Intent("com.android.ServiceStopped");
 sendBroadcast(intent);
        } 
以下是您的广播接收器代码

import android.app.*;
import android.content.*;
import android.os.*;

public class ScreenReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent background = new Intent(context, yourservice.class);
        context.startService(background);
    }

}

还有一个广播接收器,它将再次启动服务。我试过了。服务从所有类型的终止重新启动。

如果您的服务是由应用程序启动的,那么实际上您的服务是在主进程上运行的。所以,当应用程序被终止时,服务也将停止。因此,您可以通过
onTaskRemoved
方法发送广播,如下所示:

public class MyService extends Service {
    private BroadcastReceiver mReceiver = null;
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
    @Override
    public void onCreate() {
        final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        mReceiver = new ScreenReceiver();
        registerReceiver(mReceiver, filter);
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
            if (ScreenReceiver.wasScreenOn) {
           Log.e("MYAPP", "SCREEN TURNED OFF");

            } else {
            // this is when onPause() is called when the screen state has not changed
        }
        return START_STICKY;   
       }

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

        @Override public void onTaskRemoved(Intent rootIntent){
              Intent intent = new Intent("com.android.ServiceStopped");
 sendBroadcast(intent);
        } 
以下是您的广播接收器代码

import android.app.*;
import android.content.*;
import android.os.*;

public class ScreenReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent background = new Intent(context, yourservice.class);
        context.startService(background);
    }

}

还有一个广播接收器,它将再次启动服务。我试过了。服务从所有类型的终止重新启动。

您可以使用广播接收器检测某些意图并启动您的服务您有示例吗?如果服务终止,您可以在服务的
onDestroy()
中发送广播,并创建(并注册)一个
BroadcastReceiver
以获取
广播。但是,重新启动一个被用户杀死的服务是一个非常糟糕的做法……对于一个即将发布的应用程序,你永远不应该这样做……Screen Receiver是我的broadcast Receiver。你可以使用广播接收器来检测一些意图并启动你的服务。你有例子吗?你可以在
onDestroy()中发送广播
并创建(并注册)一个
BroadcastReceiver
,以在服务终止时获取
广播。但是,重新启动一个被用户杀死的服务是一个非常糟糕的做法……对于一个即将发布的应用程序,你永远不应该这样做……屏幕接收器是我的broadcastreceiver@help好的,请给我一些时间如果您在清单中设置了
ServiceInfo.FLAG\u STOP\u和\u TASK
,那么您将不会收到
onTaskRemoved
回调;相反,服务将只是停止。@帮助确定给我一些时间如果您在清单中设置了
ServiceInfo。用任务标记\u STOP\u
,那么您将不会收到
onTaskRemoved
回调;相反,服务将简单地停止。