7

我使用了postedDelayed 方法来刷新我的Activity,效果很好。但问题是,即使我按下后退按钮后延迟方法回调上一个活动..

//30000 毫秒后延迟刷新活动的处理程序

mHandler.postDelayed(new Runnable() {
public void run() {
               dostuff();

        }
            }, 30000);
    }

protected void dostuff() {
Intent intent = getIntent();
finish();startActivity(intent);
Toast.makeText(getApplicationContext(), "refreshed", Toast.LENGTH_LONG).show();
}

public void onBackPressed() {
        super.onBackPressed();
        finish();
        mHandler.removeCallbacks(null);
        }

protected void onStop() {
            mHandler.removeCallbacks(null);
        super.onStop();
    }
4

3 回答 3

6

你就用这个它可能对你有帮助

   Runnable runobj=new Runnable() {
public void run()
{
 dostuff();

 }
  };
 mHandler.postDelayed(runobj, 30000);
   }
public void onBackPressed() 
{
super.onBackPressed();
mHandler.removeCallbacks(runobj);
}
于 2013-04-18T04:54:20.717 回答
3

解决方法是:

在做 dostuff() 方法的时候,只要检查一下是否 Activity.isFinising() 就可以了。如果它正在完成,只需返回。

当您按下后,活动将完成,之后如果 doStuff() 执行,它不会做任何事情。

于 2013-04-18T03:31:26.680 回答
1

mHandler.removeCallbacks(null);。您将 null 作为参数传递。传递一个 Runnable onject 。那应该行得通。

public final void removeCallbacks (Runnable r)

使用上述。

在 API 级别 1 中添加删除消息队列中的 Runnable r 的所有待处理帖子。

http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29

编辑:示例

Runnable runnable = new Runnable() {
@Override
public void run() {
    // execute some code
}
};

Handler handler = new Handler();  
handler.postDelayed(runnable, 10000);
handler.removeCallbacks(runnable);
于 2013-04-18T03:33:14.697 回答