Android 多线程

最近开始做安卓项目,然而对多线程的理解和应用还是欠缺,最近就系统的学习一下


public class TestThreadActivity extends BaseActivity {
    private ProgressBar progressBar;
    private TextView textView;
    private Button downloadBtn;
    private MyTask task;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.thread_activity);
        initViews();
        testDatass();
    }
    private void initViews(){
      progressBar = findViewById(R.id.progress_v);
      progressBar.setMax(100);
      progressBar.setProgress(0);
      textView = findViewById(R.id.text_v);
      textView.setText("0");
      downloadBtn = findViewById(R.id.btn_start_download);
        task = new  MyTask();
      downloadBtn.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
           task.execute();
          }
      });
    }
//下载的一个小demo
    private class MyTask extends AsyncTask{
        private int count = 0;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            textView.setText("0");
        }

        @Override
        protected Object doInBackground(Object[] objects) {
            count = 0;
            while (count <100){
                try{
                    Thread.sleep(1*1000);
                    count += 1;
                }catch (Exception e){
                    e.printStackTrace();
                }
                publishProgress(count);
            }

            return null;
        }

        @Override
        protected void onProgressUpdate(Object[] values) {
            super.onProgressUpdate(values);
            progressBar.setProgress((Integer) values[0]);
            textView.setText("loading ..."+values[0] +"%");
        }

        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);
            textView.setText("加载完成");
        }

        @Override
        protected void onCancelled() {
            super.onCancelled();
            textView.setText("已取消");
            progressBar.setProgress(0);
        }
    }





    private void testDatass(){
        new MythreadE().start();
        new Thread(new MyRunable()).start();
    }
    //继承Thread方式生成新的子线程
    private class MythreadE extends Thread{
        @Override
        public void run() {
            Log.d("BOB"," MythreadE extends Thread");
        }
    }
//实现Runable借口的子线程
    private class MyRunable implements Runnable{

        @Override
        public void run() {
            Log.d("BOB"," MyRunable implements Runnable");
        }
    }
    private void test1(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    //耗时操作
                    Thread.sleep(10 * 1000);
                }catch (Exception e){e.printStackTrace();}
                //切换到主线程操作
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //更新UI
                    }
                });
            }
        }).start();

        final Button btn1 = findViewById(R.id.btn_test1);
        new Thread(new Runnable() {
            @Override
            public void run() {
                //主线程更新UI
               btn1.post(new Runnable() {
                   @Override
                   public void run() {
                  btn1.setText("china1");
                   }
               });
                //主线程更新UI,带延时
               btn1.postDelayed(new Runnable() {
                   @Override
                   public void run() {
                       btn1.setText("china2");
                   }
               }, 1 * 1000);
            }
        }).start();




    }

    //Handler(子线程调用Handler的
    //handle.sendMessage(msg);
    @SuppressLint("HandlerLeak")
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            //更新UI操作
        }
    };

    private class MyHThread extends Thread{
        @Override
        public void run() {
           try {
               Thread.sleep(10*1000);
           }catch (Exception e){
               e.printStackTrace();
           }
            Message msg = new Message();
           handler.sendMessage(msg);
           super.run();

        }
    }


    private void testAsyTask(){
        asyTask asytask = new asyTask();
        /*
         * 步骤3:手动调用execute(Params... params) 从而执行异步线程任务
         * 注:
         *    a. 必须在UI线程中调用
         *    b. 同一个AsyncTask实例对象只能执行1次,若执行第2次将会抛出异常
         *    c. 执行任务中,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()
         *    d. 不能手动调用上述方法
         */
        asytask.execute();


    }
//    轻量级异步类
    private class asyTask extends AsyncTask{
//        private boolean loadWastTimeWork(){
//            boolean isOk =
//            try{
//                Thread.sleep(5*100);}catch (Exception e){e.printStackTrace();}
//        }

    //执行任务前操作
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
        //后台线程执行时,可以在执行过程中调用publishProgress() 更新进度信息
        @Override
        protected Object doInBackground(Object[] objects) {
            //publishProgress();
            return null;
        }
    //上面的 publishProgress() 调用之后,自动调用
    @Override
    protected void onProgressUpdate(Object[] values) {
        super.onProgressUpdate(values);
    }
    //后台线程执行结束后的操作,其中参数result为doInBackground返回的结果
    @Override
    protected void onPostExecute(Object o) {
        super.onPostExecute(o);
        //ui更新操作
    }

    //异步任务被取消时候自动调用
    @Override
    protected void onCancelled() {
        super.onCancelled();
    }

}


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值