`

线程通信之handle用法

 
阅读更多

 

主显示布局以及代码:

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">


<Button
android:id="@+id/btDownload"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击下载"
/>
<ProgressBar
android:id="@+id/pbDownload"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="2"
style="@android:style/Widget.ProgressBar.Horizontal"
/>
<TextView
android:id="@+id/tvDownload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0%"/>

</LinearLayout>

java代码:

package com.litsoft.main;


import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {

private ProgressBar pbDownload;
private TextView tvDownload;
private Handler handler;

private final static int START_DOWNING = 0;
private final static int FINISH_DOWNING = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initHandler();
setListener();
}





private void setListener() {
// TODO Auto-generated method stub
findViewById(R.id.btDownload).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View view) {
// TODO Auto-generated method stub
new Thread(){


@Override
public void run() {
// TODO Auto-generated method stub
for (int i=0;i<=100;i++){
SystemClock.sleep(200);
Message message = Message.obtain();
message.what = START_DOWNING;
message.arg1 = i;
pbDownload.setProgress(i);
handler.sendMessage(message);
}
Message message = Message.obtain();
message.what = FINISH_DOWNING;
handler.sendMessage(message);
}

}.start();
}
});
}






private void initView() {
// TODO Auto-generated method stub
pbDownload = (ProgressBar) findViewById(R.id.pbDownload);
tvDownload = (TextView) findViewById(R.id.tvDownload);
}


private void initHandler() {
// TODO Auto-generated method stub
handler = new Handler(){


@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch (msg.what) {
case START_DOWNING:
tvDownload.setText(msg.arg1+"%");
break;
case FINISH_DOWNING:
Toast.makeText(MainActivity.this, "下载完成",20000).show();
break;
}

}

};
}
}

效果:



分享到:
评论

相关推荐

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--多线程之AsyncTask的用法 |--多线程之线程池ExecutorService |--字体为粗体 |--安卓下的多线程断点上传 |--对话框与进度条结合用法 |--屏幕之Activity全屏 |--屏幕之横竖屏切换 |--屏幕之调节屏幕亮度 |--屏幕...

    并行计算课程设计(报告+代码+可执行文件)

    在Java中,创建用户自己的线程类,使用启动线程的start()方法启动线程对象,使之从新建状态转入就绪状态,定义线程操作的run()方法,并定义新的run()方法覆盖原来的run()方法。 伪代码如下: And thread1=new And(1,...

    并行计算课程设计(代码+执行文件+文档)

    在Java中,创建用户自己的线程类,使用启动线程的start()方法启动线程对象,使之从新建状态转入就绪状态,定义线程操作的run()方法,并定义新的run()方法覆盖原来的run()方法。 伪代码如下: And thread1=new And(1,...

    生产者与消费者实验报告.docx

    //用于线程间的互斥 HANDLE g_hFullSemaphore; //当缓冲区满时迫使生产者等待 HANDLE g_hEmptySemaphore; //当缓冲区空时迫使消费者等待 DWORD WINAPI Producer(LPVOID); //生产者线程 DWORD WINAPI Consumer...

    基于JAVA的聊天系统的设计与实现

    在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类java.net.Socket,使得编写网络应用程序相对容易。服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接...

    psqlodbc8.01.02++

    POSTGRESQL 让客户端互相通信 &lt;br/&gt;在客户端/服务器的工作模式下,客户机处于主动状态,发送请求给监听状态的服务器,后者处理后再将结果...具体的使用方法请参照压缩包里的“说明”文挡和例子。 &lt;br/&gt;

    VC++6.0核心编程源码.rar

    从系统内部来讲,当一个Windows函数检测到一个错误时,它会使用一个称为线程本地存储器的机制,将相应的错误代码号码与调用的线程关联起来。(“线程本地存储器”将在第21章中介绍)。这将使线程能够互相独立地运行...

    Herm(一套快速开发高性能的网络应用的C++库)

    用面向对象和泛型的方法抽象了TCP/UDP的Socket IOs;抽象了Win32 Select、Linux epoll和FreeBSD kqueue的多路复用API。统一了三者水平模式(Level Triggered)的语义(一套代码在Win32/Linux/FreeBSD运行结果是一样...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

    (推荐)Win32 API大全

    1.1 为什么使用Win32 API …………………………………………………………………1 1.2 Win32 API简介 …………………………………………………………………………1 1.3 综述…………………………………………...

    windows api大全 chm版

    1.1 为什么使用Win32 API …………………………………………………………………1 1.2 Win32 API简介 …………………………………………………………………………1 1.3 综述……………………………………………………...

    新编Windows API 参考大全(CHM 中文版)

    1.1 为什么使用Win32 API …………………………………………………………………1 1.2 Win32 API简介 …………………………………………………………………………1 1.3 综述………………………………………………...

Global site tag (gtag.js) - Google Analytics