【问题标题】:redmi phone android background service getting killed红米手机安卓后台服务被杀
【发布时间】:2015-03-18 14:26:43
【问题描述】:

我有一个可以启动后台服务的应用程序,它可以在除 Redmi 1s 手机之外的所有 android 手机和模拟器上正常运行。服务正常启动。但是当用户从最近的应用程序界面中清除应用程序时,与我的应用程序相关的所有服务都会被杀死。我的应用程序需要运行此后台服务。我能做些什么来防止这个问题吗?

【问题讨论】:

    标签: android background-service


    【解决方案1】:

    试试这个:当你在任务管理器中时(长按主页键),将你想要防止被杀掉的应用程序往下拉,并锁定到内存中。您会在应用图标的一角看到一个小锁图标。

    【讨论】:

    • 这是我必须告诉我的用户的事情。有什么,我(作为应用程序开发人员)可以做的吗?
    【解决方案2】:

    我知道我回答这个问题迟了,但无论如何如果有人仍在寻找这种情况下的解决方案,这个答案可能对他们有帮助。 我不太确定这个特定的设备,因为这个设备对我来说不可用,但就小米设备而言,我使用自动启动权限来重新启动服务,一旦它被任务管理器杀死。

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

    向用户请求自动启动权限的步骤:

    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
        }
    }
    

    完成上述步骤后,即使您的应用从任务管理器中被终止,您也可以重新启动服务。

    【讨论】:

    • 这非常有用。还有here,查看权限检查方法:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多