android - 当 View 出现时创建计时器(处理程序)并在 View 消失时停止它

标签 android android-handler

我开发 iOS 应用程序已经有一段时间了,现在我已经转向 Android。我有一个要求,当 View 出现(onResume)时我必须启动计时器(在Android中思考,我需要使用处理程序)并在 View 消失(onPause)时使计时器无效(停止处理程序)。我能够创建可运行的处理程序,但无法停止它。 我的代码是:

     protected void AutoRefresh() {
     try{
handler.postDelayed(new Runnable() {
                     public void run() { 
                          new LongOperation().execute("");
                         }
                         AutoRefresh();

                 }, 60000);
    }
        catch(Exception ex){

        }

}

现在,当 View 消失时,如何停止这个处理程序线程。如果这不是在 android 中实现计时器的正确方法,请发表评论。

最佳答案

when view appears(onResume) and invalidate timer(stop handler) when view disappears(onPause). I am able to create runnable Handler but not able to stop it.

保留对您使用的Runnable的引用:

private Runnable mRefresh = new Runnable() {
     public void run() { 
          new LongOperation().execute("");
     }
     AutoRefresh();
}
//...
protected void AutoRefresh() {
    handler.postDelayed(mRefresh, 60000);
}

并在onPause中将其删除,如下所示:

handler.removeCallbacks(mRefresh);

请记住,这不会删除当前正在执行的Runnable(如果有),因此在LongOperationonPostExecute中您可能希望在刷新 UI 或与 Activity 进行任何其他交互之前检查 Activity 是否仍然可用。

Please also comment, if its not the right way to do timer implementation in android.

您似乎需要在一定的时间间隔执行一个操作,并且使用 Handler 是执行此操作的方法,我不认为计时器是您所需要的。

关于android - 当 View 出现时创建计时器(处理程序)并在 View 消失时停止它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15038622/

相关文章:

android - 如何从 SQLite 数据库中检索图像?

android - 从自定义 ListView 中的 TextView -w/Button 获取文本

android - 来自处理程序 postDelayed 的条件信号?

java - 倒计时器显示 toast 一半时间

android - savedInstanceState 给了我一个错误的值

android - Unity3d 中的 GCM 推送通知导致 gms.iid.InstanceID classnotfound

xmlpullparser 的 Android dalvik 转换

java - Android UI 在 JDBC 连接上挂起 - 即使连接在另一个线程上

java - 安卓线程 : This Handler class should be static or leaks might occur

android - 在不重新启动应用程序的情况下转移 Android 应用程序开发框架