首页 > 解决方案 > 在android studio中同时运行两个类

问题描述

我设置当前应用程序的方式是,当您按下按钮时,应用程序在底部显示一个计数器,该计数器上升到十然后停止,然后它在顶部显示一个从 10 到 0 的计数器。但是,我需要做的是让这些计数器同时发生。我尝试使用线程,但我认为我一定没有做对。任何帮助,将不胜感激。

编辑:我想同时运行 mytask 和 mytask1,它们当前相互运行

edit2:我被要求提供发布进度的代码

protected final void publishProgress(Progress... values) {
        if (!isCancelled()) {
            getHandler().obtainMessage(MESSAGE_POST_PROGRESS,
                    new AsyncTaskResult<Progress>(this, values)).sendToTarget();
        }
    }

代码:

public class MainActivity extends AppCompatActivity {

Button btn;
TextView txt;
Integer count =1;
Integer count1 =10;
TextView txt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   //p
   //p
   btn = (Button) findViewById(R.id.button);
   btn.setText("Start");
   txt = (TextView) findViewById(R.id.textView);
   txt1 = (TextView) findViewById(R.id.textView2);
   View.OnClickListener listener = new View.OnClickListener(){
       public void onClick(View view){
           count =1;
           //p
           //p
           switch (view.getId()){
               case R.id.button:
                   new MyTask().execute(10);
                   new MyTask1().execute(0);
                   break;
           }
       }
   };
   btn.setOnClickListener(listener);

}


class MyTask extends AsyncTask<Integer, Integer, String> {
    @Override
    protected String doInBackground(Integer... params) {
        for (; count <= params[0]; count++) {
            try {
                Thread.sleep(1000);
                publishProgress(count);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return "Task Completed.";
    }
    @Override
    protected void onPostExecute(String result) {
        txt.setText(result);
        btn.setText("Restart");
    }
    @Override
    protected void onPreExecute() {
        txt.setText("Task Starting...");
    }
    @Override
    protected void onProgressUpdate(Integer... values) {
        txt.setText("BackGround Task Running..."+ values[0]);
    }
}

class MyTask1 extends AsyncTask<Integer, Integer, String> {
    @Override
    protected String doInBackground(Integer... params) {
        for (; count1 >= params[0]; count1--) {
            try {
                Thread.sleep(1000);
                publishProgress(count1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return "Task Completed.";
    }
    @Override
    protected void onPostExecute(String result) {
        txt1.setText(result);
        btn.setText("Restart");
    }
    @Override
    protected void onPreExecute() {
        txt1.setText("Task Starting...");
    }
    @Override
    protected void onProgressUpdate(Integer... values) {
        txt1.setText("Countdown "+ values[0]);
    }
}

}

标签: javaandroidmultithreading

解决方案


AsyncTasks 根据文档在单个线程上执行,所以这可能是问题所在。


推荐阅读