我在Android应用程序中创建了一个Service
,它运行正常。但是当我点击stopButton
时,我想阻止它(完全被杀)。为此,我编写了此代码,但是当我单击stopButton
时,此代码不会停止服务。所以请帮忙。
服务
public class HelloService extends Service {
static boolean isRunning = false;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
isRunning = true;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
try{Thread.sleep(3000);}catch(Exception e){}
Log.e("Update", i + "", new Exception());
}
}
}).start();
return Service.START_NOT_STICKY;
}
@Override
public void onDestroy() {
isRunning = false;
stopSelf();
}
}
MainActivity
Button startButton = (Button)findViewById(R.id.start);
startButton.setOnClickListener(this);
startButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startServiceIntent = new Intent(MainActivity.this, HelloService.class);
startService(startServiceIntent);
}
}
);
Button stopButton = (Button)findViewById(R.id.stop);
stopButton.setOnClickListener(this);
stopButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent stopServiceIntent = new Intent(MainActivity.this, HelloService.class);
stopService(stopServiceIntent);
}
}
);
答案 0 :(得分:0)
我认为你误解了线程和服务。
在new Thread(new Runnable() {}).start();
之后,Runnable中的内容正在另一个线程中运行,因此如果调用者停止,它将不会停止。
如果您需要内部服务计时器,请创建默认处理程序而不是新线程。
答案 1 :(得分:0)
为了停止你的线程,你需要调用Thread.interrupt()
里面的onDestroy
方法,但要做到这一点,你必须有一个来自该线程的全局引用,因为它位于你的{{ 1}}。在调用iterrupt后,将抛出异常,并且从onStartCommand
我们将立即终止Thread的生命周期。
为了更好地理解我的意思:
catch block