与我的真实应用程序相比,我有一个 Android 服务(Servcie 接口的实现)在单独的进程上运行。不幸的是,当我离开我的真实应用程序(我在其中单击按钮启动我的服务)并从任务管理器中将其刷出时,我的服务也被杀死了。
我知道这里有很多这样的问题,但不知何故,没有人针对我的具体星座中的问题,或者他们的回答含糊不清。
所以在我的清单中,我有类似的东西:
<application ...>
<activity .../>
<service Android:name="MyService"
Android:label="MyLabel"
Android:export="false"
Android:process=":MyRemoteProcessName" />
</application>
我首先使用了 IntentService,但也切换到了自己的服务接口实现(消除了 IntentService 成为故障点),它看起来像:
public class MyService extends Service {
private ScheduledExecutorService scheduledWorker = Executors.newSingleThreadScheduledExecutor();
@Override
public void onStart() {
// Init components
startForeground(this, MyNotification);
}
@Override
public int onStartCommand(Intent i, int startId) {
// Execute Work on Threadpool here
scheduledWorker.execute(new ScheduledStopRequest(this, startId), 5, TimeUnit.Minutes);
return START_REDILIVER_INTENT;
}
// Overwritten onDestroy-Method
@Override
public void onLowMemory() {
Log.e(LOG_TAG, "On Low Memory called!");
}
@Override
public IBind onBind() {
// Dont't want to let anyone bind here
return null;
}
// Simply tries to stop the service after e.g. 5 Minutes after a call
private static class MyRunnable implements Runnable {
// Constructor with params used in run method..
@Override
public void run() {
mReferenceToMyService.stopSelfResult(startId);
}
}
}
我在一个特殊按钮上的 onClick-Listener 中启动我的服务,带有一个明确的 Intent,它看起来像下面这样:
@Override
public void onClick(View v) {
Intent i = new Intent(this, MyService.class);
startService(i);
}
我的意图是在用户离开应用程序时保持服务运行,以便服务可以完成下载和存储一些重要数据。当用户再次回到我的应用程序时,他可以查看数据(这就是我在单独的进程中执行它的原因)。那么这可能吗?
我现在的假设是,Android 以某种方式注意到我的服务只是被我的应用程序使用(由于清单中缺少 IntentFilters 或显式调用而不是过滤器?!)因此当我的应用程序关闭时立即杀死它(即使在运行时如您在上面看到的那样 ForegroundService )。
在您看来,这是否可行,并且服务调用中的一些更改可能会解决此问题,还是我对服务的概念有误?
(最后一点:没有调用 onLowMemory-Method -> 没有日志条目。)