redmi手机android背景服务被杀

时间:2015-01-20 11:16:48

标签: android background-service

我有一个应用程序,它将启动后台服务,除了Redmi 1s手机外,所有Android手机和模拟器都能正常工作。服务正常启动。但是当用户从最近的应用程序界面清除应用程序时,与我的应用程序关联的所有服务都将被杀死。我的应用程序需要运行此后台服务。我能做些什么来阻止这个问题吗?

2 个答案:

答案 0 :(得分:1)

尝试这样做:当您在任务管理器中(长按主页按钮)时,向下拖动您想要阻止的应用程序并将其锁定到内存中。您会注意到应用程序图标一角有一个小锁图标。

答案 1 :(得分:0)

我知道我回答这个问题很晚,但是无论如何,如果有人在这种情况下仍在寻找解决方案,那么这个答案可能会对他们有所帮助。 我对这个特定的设备不​​是很确定,因为我无法使用该设备,但是就小米设备而言,我正在使用自动启动权限来重新启动服务,一旦该服务从任务管理器中终止,我就使用了自动启动权限。 >

您可以要求用户手动允许自动启动权限,并且只要您的应用允许此权限,每次将其从任务管理器中删除时,它都会重新启动服务。

向用户询问自动启动权限的步骤:

  1. 如果设备制造商是小米,则将用户重定向到“自动启动设置”页面。

    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);
    }
    
  2. 您的用户必须在此处为您的应用启用自动启动。

此外,您还需要从服务的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
    }
}

完成上述步骤后,即使从任务管理器中删除了应用程序,也可以重新启动服务。