gpt4 book ai didi

android - 停止服务在 Android 上不起作用

转载 作者:太空狗 更新时间:2023-10-29 13:39:21 24 4
gpt4 key购买 nike

我是一名刚接触 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。

问题是服务不会停止。有人可以帮我吗?

最佳答案

尝试使用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);
}
};
}

这里 handler can 被初始化到 oncreate 方法中,然后当 onStart 方法被调用时,updateStatus 对象将通过 handler.post() 调用,这将启动这个 Runnable 对象的 run 方法。

现在,这将立即调用 run() 并立即执行语句,以便在特定延迟时间(如此处 1000 毫秒)在此方法内重复此任务调用,因此在完成所有执行后它将再次调用1 秒后重复此任务,这将继续,直到您无法从处理程序中删除可运行对象,所以基本上这是对 onDestroy() 的调用

关于android - 停止服务在 Android 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com