在我的应用程序中,我在活动A中创建一个处理程序,而不是我试图从活动B中关闭它。但是处理程序不会停止。 这是用户senario和我使用的代码;
这就是我尝试这样做的方式(只有处理程序创建和停止部件,因为其余部分是无效的)。
public class MyAlarmService extends Service {
public static Handler handler = new Handler();
public MyAlarmService() {
}
@Override
public IBinder onBind(Intent arg0)
{
// TODO Auto-generated method stub
return null;
}
@SuppressWarnings("static-access")
@Override
public void onStart(Intent intent, int startId)
{
super.onStart(intent, startId);
handler.postDelayed(runnable, 10000);
}
static Runnable runnable = new Runnable() {
@Override
public void run() {
sendmessage();
handler.postDelayed(this, 10000);
}
};
static public void stopRunnable (){
handler.removeCallbacks(runnable);
}
}
这就是我试图阻止处理程序的方式;
buttonStopCountDownTimer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
runOnUiThread(new Runnable() {
@Override
public void run() {
MyAlarmService.stopRunnable();
}
});
}
});
无论如何还有这个吗?
答案 0 :(得分:0)
你可以通过各种方式实现这一目标。我最喜欢的是:
扩展了Application类。 (别忘了在清单上注册)。
在其中创建您的MyAlarmService字段。
在Application类中为这些字段创建setter和getter。
在MyAlarmService内的onCreate()中调用setter。
从您的stopRunnable()中移除静态偏差并将其公开。
停止runnable只需从应用程序的任何位置调用getApplication,将其强制转换为自定义Application类。检查getMyAlarmService()getter是否为null,如果是,则可以调用stopRunnable()。
不要忘记在MyAlarmService的onDestroy()中调用setter并在其上放置null。