【问题标题】:i need to pause the thread when pause button is clicked单击暂停按钮时我需要暂停线程
【发布时间】:2015-08-18 07:48:19
【问题描述】:

当点击暂停按钮 pauseb 时我正在使用两个线程只显示暂停文本我需要暂停线程直到再次点击按钮

handler1=new Handler();
      j=new Runnable(){
        public void run() {

            AbsoluteLayout.LayoutParams absParams =
                    (AbsoluteLayout.LayoutParams) b2.getLayoutParams();

            DisplayMetrics displaymetrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
            int width = displaymetrics.widthPixels;
            int height = displaymetrics.heightPixels;


            Random r = new Random();



            absParams.x = r.nextInt(width);
            absParams.y = r.nextInt(height);
            b2.setLayoutParams(absParams);
            Animation animation = AnimationUtils.loadAnimation(page2.this, R.anim.fade);
            b2.startAnimation(animation);
            handler1.postDelayed(j, 870);
        }};
    handler1.postDelayed(j, 50);





    final Button pauseb = (Button) findViewById(R.id.pauseid);
    pauseb.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (pause == false) {
                pauseb.setText("Pause");
                pause = true;

            }

                    else{

                    pauseb.setText("Play");
                    pause = false;
                }
                }

            });


            handler = new Handler();

            t = new Runnable() {
                public void run() {
                    Intent d = new Intent(getApplicationContext(), Page3.class);
                    d.putExtra("count", count);
                    d.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(d);


                }
            };

            handler.postDelayed(t, 8000);
        }

当点击暂停按钮时线程正在工作 8 秒,它应该暂停整个活动直到恢复

【问题讨论】:

  • 我没有看到与 UI 分开的线程。
  • 处理程序和处理程序1
  • 处理程序不是线程。此处可见的所有代码都在一个线程上运行:UI 线程。

标签: android multithreading android-activity


【解决方案1】:

调用 handler.removeCallbacks(j or t) 来移除 j 或 t。

并调用 handler.postDelayed(j or t, time) 继续你的工作。

顺便说一句,处理程序在您创建处理程序的线程上运行 Runnable。在您的情况下,它是 UI 线程。

【讨论】:

    【解决方案2】:

    使用布尔标志 ....

        boolean pause = false;
    button2.setOnClickListener(new OnClickListener() {
    
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            customHandler.removeCallbacks(updateTimerThread);
            button.setVisibility(View.VISIBLE);
    
        pause = true;
    
        }
    });
    private Runnable updateTimerThread = new Runnable() {
    
    int secs;
    
    @Override
    public void run() {
        // TODO Auto-generated method stub
        timeInMillisecond = SystemClock.uptimeMillis()- startTime;
        updatedTime = timeSwapBuff+timeInMillisecond;
        secs = (int)(updatedTime/1000);
        int mins = secs/60;
        secs = secs % 60;
        int milliseconds = (int)(updatedTime % 10000);
        textView.setText( String.format("%02d", secs));
        if(!pause)
            customHandler.postDelayed(this,1000);
        imageView1 = (ImageView)findViewById(R.id.imageView4);
    
    }};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多