真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android_handler簡(jiǎn)單使用,測(cè)試

package yjm.com.testcontrol;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.io.Serializable;

public class TestActivity extends Activity implements View.OnClickListener{
    TextView tv1;
    TextView tv2;
    Button btn1;
    Button btn2;
    Button btn3;
    Button btn4;
    ProgressBar pro1;
    ATask atask;

    //創(chuàng)建 UI線程更新數(shù)據(jù),主要是UI 控件 不支持異步線程更新,必須所有的值都在UI線程值才能修改
     Handler myHandler = new Handler(){
         @Override
         public void handleMessage(Message msg) {
             switch (msg.what){
                 case R.id.tv1:
                     tv1.setText(""+msg.arg1+"");
                     break;
                 case R.id.tv2:
                     tv2.setText(""+msg.arg2+"");
             }

             super.handleMessage(msg);
         }
     };

    class UiInfo implements Serializable{
        private String uiName;
        private String uiActivity;
        private String uiUrl;

        public void setUiName(String uiName) {
            this.uiName = uiName;
        }

        public void setUiActivity(String uiActivity) {
            this.uiActivity = uiActivity;
        }

        public void setUiUrl(String uiUrl) {
            this.uiUrl = uiUrl;
        }

        public String getUiName() {
            return uiName;
        }

        public String getUiActivity() {
            return uiActivity;
        }

        public String getUiUrl() {
            return uiUrl;
        }

    }


     class TheadTest extends Thread{
         Handler myHandler;
         Message msg;
         public TheadTest(Handler handler){
              this.myHandler=handler;
         }
        @Override
        public void run(){

            for (int i = 0; i <100 ; i++) {
                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //此message 對(duì)象必須是新new的。如果重復(fù)發(fā)送同一個(gè),就會(huì)卡住報(bào)錯(cuò)。
                msg= new Message();
                msg.what=R.id.tv1;
                msg.arg1=i;
                myHandler.sendMessage(msg);
            }
        }
    }


    class ATask extends AsyncTask{



        @Override
        protected String doInBackground(Bundle... params) {
            //Bundle 可以進(jìn)行對(duì)象間的傳遞,此為后臺(tái)線程不是UI線程
            Bundle bundle =params[0];
            UiInfo uiInfo= (UiInfo) bundle.getSerializable("uiinfo");
            for (int i = 0; i <100 ; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
                publishProgress(i+"");
        }

            return "執(zhí)行成功!!";
        }

        @Override
        protected void onPreExecute() {
            //doInBackground執(zhí)行的準(zhǔn)備操作,執(zhí)行在UI線程的準(zhǔn)備操作
            System.out.println("doInBackgroup執(zhí)行前操作..");
            tv2.setText("開(kāi)始執(zhí)行更新..");

        }

        @Override
        protected void onPostExecute(String s) {
//            doInBackground后臺(tái)執(zhí)行完畢后執(zhí)行,運(yùn)行該方法
            System.out.println("doInBackgroup執(zhí)行后操作..");
            tv2.setText(s+"");

        }

        @Override
        protected void onProgressUpdate(String... values) {
//            doInBackground后臺(tái)線程 運(yùn)行 publishProgress()向UI線程推送數(shù)據(jù) onProgressUpdate接收數(shù)據(jù)
            tv2.setText(values[0]+"%");
            pro1.setProgress(Integer.parseInt(values[0]));
        }


    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_test);/**/

        tv1=(TextView)findViewById(R.id.tv1);
        tv2=(TextView)findViewById(R.id.tv2);
        pro1=(ProgressBar)findViewById(R.id.pro1);
        btn1=(Button)findViewById(R.id.btn1);
        btn2=(Button)findViewById(R.id.btn2);
        btn3=(Button)findViewById(R.id.btn3);
        btn4=(Button)findViewById(R.id.btn4);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if(view.getId()==R.id.btn1){
            tv1.setText("btn1_test..開(kāi)始.");
            new TheadTest(myHandler).start();
        }
        //UI線程內(nèi)部進(jìn)行UI數(shù)據(jù)量更新測(cè)試 按鈕2進(jìn)行測(cè)試
        if(view.getId()==R.id.btn2){
            for (int i = 0; i <10000 ; i++) {
                tv2.setText("btn2_test...:"+i);
            }
        }

        if(view.getId()==R.id.btn3){
            atask= new ATask();

                Bundle bundle = new Bundle();
                UiInfo uiInfo = new UiInfo();
                uiInfo.setUiName("processBar");
                bundle.putString("hello","hello");
                bundle.putSerializable("uiinfo", uiInfo);
                atask.execute(bundle);


        }

        if(view.getId()==R.id.btn4){
            atask.cancel(true);

        }


    }
}

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁(yè)設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開(kāi)發(fā)技術(shù)和網(wǎng)頁(yè)設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站、電商門(mén)戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!

tv1 在主線程 1-99顯示

tv1 異步更新值,通過(guò)handler顯示值

AsyncTask測(cè)試 ,遇到幾個(gè)問(wèn)題,并不很好用,1.當(dāng)前activity推出后,后臺(tái)執(zhí)行的線程仍然在執(zhí)行。

再次打開(kāi)程序仍然要等待上一次的任務(wù)執(zhí)行完畢后在執(zhí)行。

2.AsyncTask是串行執(zhí)行的,就是創(chuàng)建多個(gè) 任務(wù) 會(huì)在任務(wù)池里 按照 先進(jìn)先出的順序進(jìn)行執(zhí)行任務(wù)。當(dāng)前任務(wù)執(zhí)行完畢后 才能執(zhí)行下一個(gè)任務(wù)。再就是取消操作,如果后臺(tái)有線程在進(jìn)行循環(huán)操作,任務(wù)取消后,后臺(tái)程序仍然會(huì)在執(zhí)行。只是不會(huì)向UI線程 更新數(shù)據(jù),執(zhí)行并行需要 

 

atask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,bundle);

API 至少11的版本才能運(yùn)行這個(gè)方法。


分享題目:android_handler簡(jiǎn)單使用,測(cè)試
當(dāng)前地址:http://weahome.cn/article/gidgci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部