android service在主activity被销毁时停止



我正在制作一个应用程序,当怪物蛋再次孵化时,它会给用户一个通知。每天每5分钟可孵化多达10个蛋。我想我应该做一个服务来跟踪已经过去了多少时间,但是每次MainActivity关闭模拟器时,服务就会停止并调用onDestroy()。我做了一个测试服务,看看我是否可以让服务显示日志消息,或者在onDestroy()被调用时做一些事情。我可以让这个服务在onDestroy()中运行一个线程,但如果我要实现它,显然这是危险的。

我也在网站周围阅读,注意到人们推荐Handler或Alarm Manager。我应该用这些代替服务吗?有人能解释一下为什么我的服务在MainActivity被销毁时停止了吗?此外,是否建议在此服务或任何类中检索/存储应用程序首选项中的数据,以便服务和MainActivity可以相互通信?例如,基于计时器何时启动的种子,以便MainActivity可以在启动时从种子创建一个鸡蛋?

(编辑)哎呀,差点忘了:我还需要它,这样每当一个鸡蛋准备孵化时,通知就会出现,每当另一批鸡蛋准备好了。每当用户启动应用程序时,应用程序还应该显示下一个鸡蛋的剩余时间,或者如果用户已经用完了当天的鸡蛋,应用程序还应该显示下一批鸡蛋的剩余时间。我认为这个上下文在决定我应该使用服务、警报管理器还是处理程序时很重要。

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设置一个。

最新更新