![](/img/trans.png)
[英]Android Service stops working when calling activity is killed or destroyed
[英]android service stops when main activity is destroyed
我正在制作一个应用程序,该应用程序会在需要再次孵化怪物蛋时向用户发出通知。 每天每 5 分钟最多可孵化 10 个卵。 我想我会创建一个服务来跟踪已经过去了多少时间,但是每次 MainActivity 在模拟器上关闭时,服务都会停止并调用 onDestroy()。 我做了一个测试服务,看看我是否可以让服务显示日志消息,或者在调用 onDestroy() 时做一些事情。 我能够让服务在 onDestroy() 中运行一个线程,但如果我要实现它,显然这是很危险的。
我也在浏览网站,发现人们推荐 Handler 或 Alarm Manager。 我应该使用这些而不是服务吗? 有人还可以解释为什么 MainActivity 被销毁时我的服务停止了吗? 是否还建议从该服务或我最终使用的任何类中检索/存储应用偏好数据,以便服务和 MainActivity 可以相互通信? 例如,基于计时器何时启动的种子,以便 MainActivity 可以在启动时从种子中创建一个鸡蛋?
(edit)oops 差点忘了:我还需要它,以便在鸡蛋准备好孵化以及当天有另一批鸡蛋准备好时出现通知。 每当用户启动应用程序时,如果用户已经用完当天的鸡蛋,应用程序还应显示另一个鸡蛋或另一批鸡蛋的剩余时间。 认为这个上下文对于确定我是否应该使用服务、警报管理器或处理程序很重要。
import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
import android.util.Log;
import androidx.annotation.Nullable;
public class egg_notifications extends Service {
public static int time = -1;
public egg_notifications() {
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
AsyncTask datatask = new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
for(int c=0;c<300;c++){
Log.i("d","Time is "+c);
try {
Thread.sleep(1000);
} catch (Exception e) { }
}
return null;
}
}.execute();
return Service.START_STICKY;
}
@Override
public void onDestroy() {
Log.i("d","Service onDestroy");
AsyncTask datatask = new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
for(int c=0;c<300;c++){
Log.i("d","Time is "+c);
try {
Thread.sleep(1000);
} catch (Exception e) { }
}
return null;
}
}.execute();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
在现代 Android 中,服务会在 2 分钟后结束。 如果您只需要一个 5 分钟的计时器,请使用 Alarm 和 AlarmManager 设置一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.