我是Android新手,我有一个使用后台服务的应用程序。 我想点击按钮开始/停止服务,我这样做:
case R.id.enablepop:
if (!(pop.runningFlag))
startService(new Intent(mainScreen,PopUpService.class));
return true;
case R.id.disablepop:
if (pop.runningFlag)
stopService(new Intent(mainScreen,PopUpService.class));
return true;
在服务的onStart()函数中,我有runningFlag,我设置为“true”,然后我创建一个在runningFlag为true时工作的线程。 我在onDestroy()上将runningFlag设置为false。
问题是该服务不会停止。有人可以帮助我吗?
答案 0 :(得分:2)
尝试使用Handler,就像在这里一样,你可以像Thread一样使用Handler。
这是示例
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
public class MyService extends Service{
private Handler handler;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
handler = new Handler();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
handler.post(updateStatus);
}
@Override
public void onDestroy() {
super.onDestroy();
handler.removeCallbacks(updateStatus);
handler = null;
}
@Override
public boolean onUnbind(Intent intent) {
handler.removeCallbacks(updateStatus);
handler = null;
return super.onUnbind(intent);
}
private Runnable updateStatus = new Runnable() {
@Override
public void run() {
// do something here
handler.postDelayed(updateStatus, 1000);
}
};
}
这里处理程序可以初始化为oncreate方法,此后调用onStart方法然后将通过handler.post()调用updateStatus对象,这将启动此Runnable对象的run方法。
现在在这里,这将立即调用run()并立即执行语句,以便在此方法内重复此任务调用特定的延迟时间,如此处1000毫秒所以在完成所有执行后它将再次调用1秒后重复此任务,这将继续,直到你无法从处理程序中删除runnable对象,所以基本上是调用onDestroy()