Handler进程之间通信

来源:互联网 发布:安卓新闻推荐 知乎 编辑:程序博客网 时间:2024/05/17 17:45

java代码

package com.example.zhang.handlertest;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.SystemClock;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    TextView tvProgress;    ProgressBar pbProgress;    Button btnDownload;    Handler handler;    private static final int DOWNLOADING = 1;    private static final int DOLAOD_FINISH = 2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化View        initView();        //设置监听器,监听按钮按下状态        setListener();        //初始化Handler        initHandler();    }    //初始化Handler,把TextView的UI操作放在主线程里面    private void initHandler() {        //无参构造方法        handler = new Handler(){            @Override            //接受并处理从工作线程发来的消息            public void handleMessage(Message msg) {               // tvProgress.setText(msg.arg1 + "%");                switch (msg.what){                    //判断                    case DOWNLOADING :                        tvProgress.setText(msg.arg1 + "%");                        break;                    case DOLAOD_FINISH :                        tvProgress.setText(msg.arg1 + "%");                        Toast.makeText(MainActivity.this, "下载完成", Toast.LENGTH_SHORT).show();                }            }        };    }    //setLsitener方法    private void setListener() {        //匿名内部类作为事件监听处理        btnDownload.setOnClickListener(new View.OnClickListener() {            @Override            //重写onClick()方法            public void onClick(View v) {                //新建工作线程                new Thread(){                    @Override                    //重写run()方法                    public void run() {                        for (int j = 1; j <= 100; j++){                            //调用系统延时20ms                            SystemClock.sleep(20);                            //Progress进度条可以在工作线程操作,其他UI操作都不可以,只能在主线程操作                            pbProgress.setProgress(j);                            //从整个Messge池中返回一个新的Message实例,在许多情况下使用它,                            // 因为它能避免分配新的对象,通过调用obtainMessage方法获取Message对象                            // 就能避免创建对象,从而减少内存的开销了。                            Message msg = Message.obtain();                          //  Message msg = new Message();                            msg.what = DOWNLOADING;                            msg.arg1 = j;                            handler.sendMessage(msg);                          /*  if(j == 100){                                j = 1;                            }                            */                        }                        Message msg = Message.obtain();                        msg.what = DOLAOD_FINISH;                        msg.arg1 = 100;                        handler.sendMessage(msg);                    }                }.start();            }        });    }    private void initView() {        tvProgress = (TextView) findViewById(R.id.tvProgress);        pbProgress = (ProgressBar) findViewById(R.id.pbProgress);        btnDownload = (Button)findViewById(R.id.btnDownLoad);    }}

xml代码

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    app:layout_behavior="@string/appbar_scrolling_view_behavior"    tools:context="com.example.zhang.handlertest.MainActivity"    tools:showIn="@layout/activity_main">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="20dp"        android:text="任务进度" />    <Button        android:id="@+id/btnDownLoad"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="下载"/>    <ProgressBar        android:id="@+id/pbProgress"        android:layout_marginTop="20dp"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:max="100"        style="@android:style/Widget.ProgressBar.Horizontal"/>        <TextView            android:id="@+id/tvProgress"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginTop="10dp"            android:textSize="20sp"            android:text="%"/></LinearLayout>

图片
1

2

0 1
原创粉丝点击