我已经实现了一个处理程序,允许用户使用任务栏菜单启动每5秒重复一次的事件。使用它的最佳方法是什么还允许用户从任务栏菜单中停止事件?
public class MainActivity extends Activity{
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menuitem_tracklogOn:
final Handler handler = new Handler();
Timer t = new Timer();
t.schedule(new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
//DO SOME ACTIONS HERE , THIS ACTIONS WILL WILL EXECUTE AFTER 5 SECONDS...
handler.postDelayed(this, 5000);//repeat every n-milliseconds
}
});
}
}, 0);//start after n-milliseconds
return true;
case R.id.menuitem_tracklogOff:
//stops running event from R.id.menuitem_tracklogOn
return true;
解决方案:
final Handler handler = new Handler();
Timer t = new Timer();
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menuitem_tracklogOn:
t.schedule(new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
//DO SOME ACTIONS HERE , THIS ACTIONS WILL WILL EXECUTE AFTER 5 SECONDS...
handler.postDelayed(this, 5000);//repeat every n-milliseconds
}
});
}
}, 2000);//start after n-milliseconds
return true;
case R.id.menuitem_tracklogOff:
t.cancel();
handler.removeCallbacksAndMessages(null);
return true;
答案 0 :(得分:1)
使用的最佳方法是什么,也允许用户停止 任务栏菜单中的事件?
在Handler
点击停止menuitem_tracklogOff
:
1。通过致电Timer
timer.cancel()
2. :调用removeCallbacksAndMessages
删除所有回调和消息:
handler.removeCallbacksAndMessages(null);
要在Timer
之外的Handler
和case
对象之外访问,请在onOptionsItemSelected方法之外或在switch-case
阻止之前声明其他对象。
答案 1 :(得分:0)
您需要致电timer.cancel()
取消您的计时器。
public void cancel() // Added in API level 1
取消计时器和所有计划任务。如果当前正在运行的任务,则不会受到影响。此计时器不再安排任何任务。后续调用什么都不做。