红米手机安卓后台服务被杀
Posted
技术标签:
【中文标题】红米手机安卓后台服务被杀【英文标题】:redmi phone android background service getting killed 【发布时间】:2015-03-18 14:26:43 【问题描述】:我有一个可以启动后台服务的应用程序,它可以在除 Redmi 1s 手机之外的所有 android 手机和模拟器上正常运行。服务正常启动。但是当用户从最近的应用程序界面中清除应用程序时,与我的应用程序相关的所有服务都会被杀死。我的应用程序需要运行此后台服务。我能做些什么来防止这个问题吗?
【问题讨论】:
【参考方案1】:试试这个:当你在任务管理器中时(长按主页键),将你想要防止被杀掉的应用程序往下拉,并锁定到内存中。您会在应用图标的一角看到一个小锁图标。
【讨论】:
这是我必须告诉我的用户的事情。有什么,我(作为应用程序开发人员)可以做的吗?【参考方案2】:我知道我回答这个问题迟了,但无论如何如果有人仍在寻找这种情况下的解决方案,这个答案可能对他们有帮助。 我不太确定这个特定的设备,因为这个设备对我来说不可用,但就小米设备而言,我使用自动启动权限来重新启动服务,一旦它被任务管理器杀死。
您可以要求您的用户手动允许自动启动权限,只要您的应用允许此权限,它就会在您每次从任务管理器中删除它时重新启动您的服务。
向用户请求自动启动权限的步骤:
如果设备制造商是小米,则将用户重定向到自动启动设置页面。
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
完成上述步骤后,即使您的应用从任务管理器中被终止,您也可以重新启动服务。
【讨论】:
这非常有用。还有here,查看权限检查方法:以上是关于红米手机安卓后台服务被杀的主要内容,如果未能解决你的问题,请参考以下文章
oppo-coloros、vivo-funtouch os、小米-MIUI os等定制操作系统新推出的设备,如何保护后台服务/报警被杀?