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
回调;相反,服务将简单地停止。