每当 App 在 android pie 中被杀死时,服务也会被杀死
Posted
技术标签:
【中文标题】每当 App 在 android pie 中被杀死时,服务也会被杀死【英文标题】:Service also gets killed whenever App is killed in android pie 【发布时间】:2019-11-17 12:36:03 【问题描述】:我正在通过创建一个 android 应用来学习 Android 编程。但是每当我杀死应用程序服务时也会被杀死。我正在使用JobIntentService
。使该应用在后台运行。
JobIntentService 类
public class BackGroundDistanceCalculate extends JobIntentService
final public static String TAG = "BackGroundDistance";
static void enqueueWork(Context context, Intent job)
enqueueWork(context, BackGroundDistanceCalculate.class, 1, job);
@Override
public void onCreate()
super.onCreate();
Log.d(TAG, "Service Start");
@Override
protected void onHandleWork(@NonNull Intent intent)
Log.d(TAG, "Execution Started");
int i=0;
for(i=0; i<1000; i++)
SystemClock.sleep(1000);
@Override
public boolean onStopCurrentWork()
Log.d(TAG,"Now It's Stopped");
return super.onStopCurrentWork();
@Override
public void onDestroy()
Log.d(TAG,"Now It's Destroyed");
super.onDestroy();
MainActivity
Intent backCheck = new Intent(MapsActivity.this, BackGroundDistanceCalculate.class);
BackGroundDistanceCalculate.enqueueWork(this, backCheck);
创建此意图以在 onCreateMethod
中启动 Activity
清单
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<service
android:name=".BackGroundDistanceCalculate"
android:permission="android.permission.BIND_JOB_SERVICE" />
即使应用程序被终止,我可以进行哪些更改以使服务成功运行?提前致谢。
【问题讨论】:
【参考方案1】:你需要将你的服务迁移到前台服务或至少显示一个持续的通知,因为从 android 8.0 开始,应用程序无法在不让用户知道的情况下运行后台服务。如果你想在没有通知的情况下进行,一种方法是迁移您对无障碍服务Create accessibility service 的服务。 想做的话可以参考这个链接。
【讨论】:
【参考方案2】:使用不可关闭的通知启动前台服务
【讨论】:
阅读有关后台服务 android 8 及更高版本的更改developer.android.com/about/versions/oreo/android-8.0-changes以上是关于每当 App 在 android pie 中被杀死时,服务也会被杀死的主要内容,如果未能解决你的问题,请参考以下文章
每当设置一个可移动的按钮时,它就不会在android中被点击