`

线程通信之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;
}

}

};
}
}

效果:



分享到:
评论

相关推荐

    安卓学习之handle的使用方法

    在 Android 开发中,Handle 是一个关键的组件,它主要用于在不同的线程之间进行通信,特别是在 UI 线程和后台线程之间。Handle 的主要作用是解决 Android 应用程序中的多线程问题,确保耗时的操作不会阻塞主线程,...

    使用全局对象进行线程间的通信

    在使用全局变量进行线程通信时,通常需要配合这些同步原语来确保数据的一致性。 举个例子,假设我们有一个全局变量`g_counter`,两个线程`ThreadA`和`ThreadB`都需要修改这个计数器。为了保证安全,我们需要在修改`...

    android handle线程数据传递 源代码

    除了Handler,Android还提供了其他多线程通信方式,如AsyncTask、IntentService、BroadcastReceiver等,它们各有优势,适用于不同场景。但不论选择哪种方式,理解和掌握Handler机制对于优化Android应用性能和用户...

    简单的handle demo 实现计时器功能,亲测可用,线程例子

    1. **Handle机制**:Handle机制是Android系统中一种基于消息队列的消息通信方式。它包括三部分:Handler、Message和Looper。Handler负责发送和处理消息,Message是传递的数据对象,而Looper是消息循环器,它在一个...

    android demo,实现主线程handle,工作子线程threadHandle的处理

    在Android开发中,多线程是必不可少的一部分,它使得应用程序能够同时执行多个任务,提高程序的效率和用户体验。本示例“android demo,实现...这个“android demo”旨在帮助开发者理解并实践这种多线程通信的方式。

    线程间通信方式2:参数传递方式

    本文将详细探讨“线程间通信方式2:参数传递方式”,并通过对不同创建线程方法的分析,展示如何有效地传递参数。 1. **线程创建方法** 在Windows API中,我们通常使用以下三种方法创建线程: - **CreateThread...

    handle的用法

    在Android开发中,`Handler` 是一个至关重要的组件,它主要负责在主线程与子线程之间进行消息传递和通信。`Handler`、`Looper` 和 `Message` 三者结合,构成了Android中的消息处理机制。下面我们将深入探讨`Handler`...

    qt object多线程- 串口通信

    总的来说,通过在Qt中使用对象的继承方式,我们可以创建一个专门处理串口通信的线程,这样既保持了主线程的流畅性,又确保了串口操作的安全性。这在开发涉及实时数据传输或设备控制的项目中是非常实用的技术手段。在...

    Android线程中Handle的使用讲解

    Android线程中Handle的使用讲解 Android操作系统中,UI线程是非常重要的,它负责更新用户界面和处理用户输入,而子线程则负责执行耗时的任务,以避免阻塞UI线程。然而,在子线程中进行UI操作可能会导致程序崩溃。...

    Handle.线程问题

    在Android开发中,`Handler`机制是解决子线程与UI主线程通信的关键技术之一。由于Android系统为了确保用户界面的响应性和流畅性,强制所有与用户界面相关的操作都必须在主线程(也称为UI线程)中执行,因此对于那些...

    Thread&Handle 使用

    标签“源码”暗示了文章可能包含了示例代码,读者可以通过阅读和分析源码来理解线程和句柄的使用方法。“工具”可能意味着文章介绍了一些辅助工具或者API,帮助开发者更好地管理和调试线程。 至于...

    VC中利用多线程技术实现线程之间的通信

    综上所述,VC++中实现线程间的通信涉及多种技术和方法,需要根据具体的应用场景选择合适的方式。通过熟练掌握这些技术,开发者可以在多线程程序中实现高效、安全的通信,提升软件的性能和用户体验。在实践中,可以...

    Android handle传值Demo

    这个Demo对于初学者来说,是一个很好的学习资源,它帮助理解Android中线程通信的基本原理。通过实践这个Demo,开发者可以掌握如何在不同线程间安全地传递复杂数据,提升应用的性能和用户体验。 总的来说,Handler和...

    学习多线程之一:线程通信--利用事件对象VC源代码

    本示例“学习多线程之一:线程通信--利用事件对象VC源代码”深入探讨了如何使用事件对象(CEvent)来实现线程间的通信,这对于理解和优化多线程程序的性能至关重要。 线程通信是多线程编程中的关键概念,它允许不同...

    Thread和Handle的使用

    主线程使用Handler和Message与其他线程通信的流程如下: 1. 在主线程中创建Handler实例,并关联到Looper(默认情况下,主线程已经有一个运行的Looper)。 2. 在工作线程中,创建Message对象,设置需要传递的数据,并...

    VC++通信技术之多线程编程

    MFC通过封装复杂的API调用,提供了易于使用的类和方法来管理线程的创建、同步和通信等操作。 #### 六、总结 多线程编程是提高程序响应性和执行效率的重要手段之一。通过对多线程的基本概念、优势及其在VC++环境下...

    TCP服务器多线程

    本篇文章将深入探讨“TCP服务器多线程”的概念、原理以及实现方法。 首先,我们要理解TCP的基本特性。TCP是一种面向连接的传输协议,它在数据传输前会建立连接,通过三次握手确保双方通信的可靠性。在数据传输过程...

    VC多线程编程的常用三种方法

    - **线程通信**:可以使用Windows的消息队列、事件对象、临界区等进行线程间的通信。 - **资源管理**:确保线程安全地访问共享资源,避免资源泄露。 - **异常安全**:考虑线程中的异常处理,确保在异常发生时能正确...

    java 手写实现 Android Handle 机制

    Android中的Handler机制是Android消息处理和线程通信的核心机制,它允许开发者在不同的线程间传递消息并执行相应的操作。本篇文章将详细讲解如何使用Java手写实现Android的Handler机制,以及背后的原理。 首先,...

    socket通信示例代码(线程、异步)

    在提供的示例代码中,服务器可能会使用`asyncio`库创建一个事件循环,然后定义异步的`accept`和`handle_client`函数,通过`asyncio.start_server`启动服务器。客户端则可能使用`asyncio.create_connection`来建立...

Global site tag (gtag.js) - Google Analytics