Android +如何中断处理程序的循环(run())

时间:2013-02-28 11:29:04

标签: android handler

我有4个课程,

  1. FirstActivity
  2. Play_1
  3. Play_2
  4. Play_3
  5. 点击FirstActivty中的按钮,我会随机进入其余三项活动。 例如,在下面的代码中,我来到Play3.class ...我已设置then处理程序运行3秒。 我的问题是在run() 3秒的时间内,如果我点击backButton,它将转到FirstActivity.class,并且在run()时间的3秒之后,它会转到随机循环(Play_1Play_2Play_3)。现在,我只想在点击FirstActivity.class时永久转到backButton。我该怎么办?

    (注意:完成run()时间为3秒后,我很高兴进入主屏幕。但是,在那个run()时间内我只想中断循环然后回到主页屏幕。)

    class listener implements OnClickListener {
    
        @Override
        public void onClick(final View v) {
    
            switch (v.getId()) {
                case R.id.play3_image1:
                    bt1.setVisibility(View.GONE);
                    bt2.setVisibility(View.GONE);
                    bt3.setVisibility(View.GONE);
                    bt4.setVisibility(View.GONE);
                    bt5.setVisibility(View.GONE);
                    bt6.setVisibility(View.VISIBLE);
    
                    try {
                        new Handler().postDelayed(new Runnable() {
    
                            @Override
                            public void run() {
                                Random rand = new Random();
                                int x = rand.nextInt(3) + 1;
    
                                Intent intent = new Intent();
    
                                switch (x) {
                                    case 1:
                                        intent.setClass(v.getContext(), Play_1.class);
                                        break;
                                    case 2:
                                        intent.setClass(v.getContext(), Play_2.class);
                                        break;
                                    case 3:
                                        intent.setClass(v.getContext(), Play_3.class);
                                        break;
                                    default:
                                        break;
                                }
                                startActivity(intent);
                            }
                        }, 3000);
                    } catch (Exception e) { e.printStackTrace(); }
                }
    
            @Override
            public boolean onKeyDown(int keyCode, KeyEvent event) {
    
                if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 ){
                    Intent i = new Intent(Play_3.this,Example.class);
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                }
                return super.onKeyDown(keyCode, event);
            }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

Handler对象提供了其他可以帮助您的帖子方法:

  • 使用postAtFrontOfQueue(Runnable r),您可以发布可在下一个循环中执行的runnable。
  • 使用removeCallbacksAndMessages(Object token),您可以删除给定的可运行或消息,或使用null参数清除处理队列。

使用这些实用程序,您应该能够轻松处理状态chanes。

注意:由于您使用的是主线程循环器,因此不应在您的处理程序对象上调用getLooper()。quit(),因为这会停止您的应用程序(如果没有完全崩溃)。