我有一个应用程序,它将启动后台服务,除了Redmi 1s手机外,所有Android手机和模拟器都能正常工作。服务正常启动。但是当用户从最近的应用程序界面清除应用程序时,与我的应用程序关联的所有服务都将被杀死。我的应用程序需要运行此后台服务。我能做些什么来阻止这个问题吗?
答案 0 :(得分:1)
尝试这样做:当您在任务管理器中(长按主页按钮)时,向下拖动您想要阻止的应用程序并将其锁定到内存中。您会注意到应用程序图标一角有一个小锁图标。
答案 1 :(得分:0)
我知道我回答这个问题很晚,但是无论如何,如果有人在这种情况下仍在寻找解决方案,那么这个答案可能会对他们有所帮助。 我对这个特定的设备不是很确定,因为我无法使用该设备,但是就小米设备而言,我正在使用自动启动权限来重新启动服务,一旦该服务从任务管理器中终止,我就使用了自动启动权限。 >
您可以要求用户手动允许自动启动权限,并且只要您的应用允许此权限,每次将其从任务管理器中删除时,它都会重新启动服务。
向用户询问自动启动权限的步骤:
如果设备制造商是小米,则将用户重定向到“自动启动设置”页面。
if ("xiaomi".equalsIgnoreCase(android.os.Build.MANUFACTURER)) {
Intent autostartIntent = new Intent();
autostartIntent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
startActivity(autostartIntent);
}
此外,您还需要从服务的onDestroy()发送广播,该广播将在每次服务被销毁时重新启动。
服务类的onDestroy()
@Override
public void onDestroy() {
super.onDestroy();
Log.i("EXIT", "ondestroy!");
Intent broadcastIntent = new Intent("ac.in.ActivityRecognition.RestartSensor");
sendBroadcast(broadcastIntent);
}
在清单文件中定义接收方
<receiver
android:name=".recievers.SensorRestarterBroadcastReceiver"
android:enabled="true"
android:exported="true"
android:label="RestartServiceWhenStopped">
<intent-filter>
<action android:name="ac.in.ActivityRecognition.RestartSensor" />
</intent-filter>
</receiver>
CustomBroadcastReceiver.java
public class SensorRestarterBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(SensorRestarterBroadcastReceiver.class.getSimpleName(), "Service Stopped!");
context.startService(new Intent(context, MyService.class)); // Restart your service here
}
}
完成上述步骤后,即使从任务管理器中删除了应用程序,也可以重新启动服务。