11

如何handler.postDelayed()使用按钮暂停计时器。所以当我再次点击同一个按钮时,handler.postDelayed()计时器应该恢复。

handler.postDelayed(counterz, 60);
4

3 回答 3

19

Handler没有计时器可以调整。您正在发布到线程的事件队列,其中还有很多其他的东西正在运行。

您可以取消张贴Runnable的:

handler.removeCallbacks(counterz);

并再次发布,以恢复。

于 2013-07-03T03:45:27.257 回答
3

处理程序没有pause方法。您需要取消并再次运行。

http://developer.android.com/reference/android/os/Handler.html#removeCallbacks(java.lang.Runnable)

public final void removeCallbacks (Runnable r)

删除消息队列中所有待处理的 Runnable r 帖子。

不需要时,您需要调用 m_handler.removeCallbacks(m_handlerTask)以取消运行。如果您再次需要,则需要再次运行该任务。

            Handler m_handler;
            Runnable m_handlerTask ;  
            m_handler = new Handler();  
            m_handlerTask = new Runnable()
           {
               @Override 
               public void run() {
                             // do something 

                    m_handler.postDelayed(m_handlerTask, 1000);    

               }
          };
          m_handlerTask.run(); // call run

假设您使用计时器。甚至计时器也没有暂停方法。

于 2013-07-03T03:58:34.983 回答
0
public class YourActivity extends AppCompatActivity {

    private static boolean handlerflag=false;
    private Handler handler;
    private Runnable runnable;
    private int myind=0,index=0,count=0;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_activtiy);         
        //oncreate exe only
        handlerflag=true;
        handler = new Handler();
        startyourtime(0);
 }
  private void  startyourtime(int a) {

    myind=0;
    for (index=a; index<10 ;index++) {
            myind++;
            runnable=new Runnable() {
                count++;
                @Override
                public void run() {
                          //your code here
               }
            };handler.postDelayed(runnable, Constants.TIME_LIMIT * myind);

   }
    @Override
    protected void onPause() {
        super.onPause();
        handlerflag=false;
        handler.removeCallbacksAndMessages(null);
    }
    @Override
    protected void onResume() {
        super.onResume();
        if(!handlerflag)
        {
           startyourtime(count);

        }
    }
}
于 2018-07-11T05:38:37.587 回答