我想知道这是否是阻止我定期调用service
的正确方法。我的isServiceStopped
中有一个静态布尔变量MainActivity
,我可以通过点击按钮开始或停止正在进行的service
。如您所见,我使用onDestroy()
在AlarmManager
方法中重新安排了我的服务,所以如果我在我的MainActvity中调用stopService()
,它只会销毁服务但重新安排它,所以不会有任何服务影响。
这就是为什么我使用一个标志,一个静态布尔变量,我可以在我的MainActivity中设置:如果我点击按钮停止服务我设置这个标志true
并且服务将不会再次重新安排,因为它将不能在onDestroy()
方法中运行。
这是有效的,但我个人认为这只是一个糟糕的解决方法,因为如果我关闭应用程序,如果只运行服务,系统将如何找到静态变量?那么这样做的正确方法是什么?我应该将重新安排部分放在onStartCommand()
吗?
谢谢!
public class AsyService extends Service {
@Override
public IBinder onBind(Intent i) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
//Right now I have a static variable defined in MainActivity to set the boolean isServiceStopped
if (!MainActivity.isServiceStopped){
AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
alarm.set(
AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + (1000 * 15),
PendingIntent.getService(this, 0, new Intent(this, AsyService.class), 0)
);
}
}
}
MainAcvitiy:
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 1, new Intent(MainActivity.this, AsyService.class), PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
alarm.cancel(pendingIntent);
}
});
答案 0 :(得分:0)
正确的方法是重新创建原始待处理意图,取消它,并从警报管理器中删除该服务。我不知道你为什么要从内部终止服务。
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.cancel(pendingIntent);