如何启动/停止Runnable/Handler?

6

我正在尝试在Web服务和Android应用程序之间保持数据库同步。

以下代码可以工作,但是我遇到了一些问题:

  • 每次我进入应用程序的主页时,都会启动一个新的无限进程。
  • 该进程永远不会结束。

有人能解释一下如何按照我的意愿启动和停止此进程吗?
我希望这个进程每5分钟运行一次,但只运行一次,并且在应用程序打开时。

public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final Handler handler = new Handler();
    final Runnable r = new Runnable() {
        public void run() {
            // DO WORK
            Mantenimiento();
            // Call function.
            handler.postDelayed(this, 1000000);
        }
    };
    r.run();
}

1
使用 removeCallback。http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29 - Blackbelt
1
您可以使用此代码 handler.removeCallbacks(); 停止 Handler。 - RajaReddy PolamReddy
但我需要在onDestroy中停止它。 - Zartch
在onDestroy()中调用handler.removeCallbacks()有什么问题吗? - The incredible Jan
3个回答

3

使用TimerTask,我可以控制任务。谢谢。 - Zartch
2
不要在Android中使用Java计时器,它们不可靠。在Android中,处理程序是计时器的替代品。 - black

1
每5分钟?你知道handler.postDelayed(this, 1000000);的作用吗?它会每16.7分钟启动一次runnable。将分钟转换为毫秒并不难。在postDelayed()之前,需要检查handler.removeCallbacks()和布尔变量。

0

会使用这段代码:

public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final Handler handler = new Handler();
    final Thread r = new Thread() {
        public void run() {
            // DO WORK
            Mantenimiento();
            // Call function.
            handler.postDelayed(this, 1000000);
        }
    };
    r.start(); // THIS IS DIFFERENT
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接