Android的进程Hnadler与AsyncTask

来源:互联网 发布:网络高清图片大全 编辑:程序博客网 时间:2024/06/05 03:35

概述:

不能在非UI线程中操完成UI线程中的操作;
服务必须在manifests中注册。

代码

进程

完成一个倒计时

public class TestThread extends Activity {    private Button mTimeCountButton;    private int count;    private static final int TIME_DESC = 0x23;    private Handler mHandler;    private Message message;    //方法2:在Handler中完成//    private Handler handler = new Handler() {//        @Override//        public void handleMessage(Message msg) {//            switch (msg.what){//                case TIME_DESC://                    mTimeCountButton.setText(count+"秒");//                    count--;//                    try {//                        Thread.sleep(1000);//                    } catch (InterruptedException e) {//                        e.printStackTrace();//                    }//                    handler.sendEmptyMessage(TIME_DESC);//                    break;//                default://                    break;//            }//        }//    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.layout_test_thread);        message = new Message();        mTimeCountButton = (Button) findViewById(R.id.button_time_count);        mTimeCountButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                MyThread thread = new MyThread();                thread.start();                //方法1:在监听函数中//                count = 60;//            handler.sendEmptyMessage(TIME_DESC);//                new Thread(new Runnable() {//                    @Override//                    public void run() {//                        while (count>0){//                            Message msg = new Message();//                            msg.obj = count+"秒";//                            msg.what = TIME_DESC;//                            handler.sendMessage(msg);//                            try {//                                Thread.sleep(1000);//                            } catch (InterruptedException e) {//                                e.printStackTrace();//                            }//                            count--;//                        }//                    }//                }).start();            }        });    }    //方法3:用Looper完成    class MyThread extends Thread {        @Override        public void run() {            Looper.prepare();            mHandler = new Handler() {                @Override                public void handleMessage(Message msg) {                    Log.d("dd", "接受到主线程的消息");                }            };            Looper.loop();        }    }}

布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:layout_width="match_parent"              android:layout_height="match_parent">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="倒计时"/>    <Button        android:id="@+id/button_time_count"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="60秒"/></LinearLayout>

AsyncTask

新建的Task继承于AsyncTask需要实现三个方法:

public class TestAsycTask extends Activity {    private ProgressBar mProgressBar;    private Button mButton;    private int count;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.layout_async_task);        mProgressBar = (ProgressBar) findViewById(R.id.progressBar_asyc);        mButton = (Button) findViewById(R.id.button_asyc);        mButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                MyTask task = new MyTask();                task.execute();            }        });    }    class MyTask extends AsyncTask<String,String,String>{        @Override        protected void onProgressUpdate(String... values) {            super.onProgressUpdate(values);            int count = Integer.parseInt(values[0]);            mProgressBar.setProgress(count);        }        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            mButton.setText(s);        }        @Override        protected String doInBackground(String... params) {            while(count<101){                count++;                publishProgress(""+count);                try {                    Thread.sleep(200);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            return "全部完成";        }    }}

布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_width="match_parent"              android:layout_height="match_parent">    <ProgressBar        style="?android:attr/progressBarStyleHorizontal"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_margin="10dp"        android:id="@+id/progressBar_asyc"        android:layout_gravity="center_horizontal"/>    <Button        android:id="@+id/button_asyc"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Start Download"/></LinearLayout>
0 0
原创粉丝点击