Hander多线程实现ProgressBar的自动完成
来源:互联网 发布:java核心技术卷2 编辑:程序博客网 时间:2024/06/07 05:52
今天学习到Android的多线程部分,简单总结一下,并做了个简单的Demo:
在安卓应用程序中一些耗时的操作,比如读取数据,UI更新,网络数据传输等任务不能在主线程中进行,否则会造成UI阻塞,给用户带来不良的体验甚至5秒后还卡主就显示ANR错误;所以在程序中我们使用多线程来执行这些操作,在安卓中也叫信息传递 机制:
主要内容如下:
1、多线程的实现方式:Thread和实现Runnable接口;
2、创建Hander对象发送并处理信息
1.1线程的创建:
1:Thread thread = new Thread(new Runnable){
//重写run方法
public void run(){
//要执行的操作}
}
2:通过Runnable接口
public class ClassName extends Object inplements Runnable{
//重写run方法
public void run(){
//要执行的操作}}
------------------------------------------------------------------------------------------------------------------------------------------------------------
2:Hander的信息传递:
1、实例化Hander对象
2、执行发送信息:
3;重写信息处理handMessage();
在这个过程中注意Looper的使用
在实例化hander之前需要先准备Looper.prepare();最后需要启动Looper.loop();
3:以下是一个多线程配合ProcessBar自动填充的实例:
3.1:是布局文件,主要是添加一个ProcessBar的控件和一个发送多线程的按钮:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <ProgressBar style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal" android:id="@+id/process" android:max="100" android:progress="10" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:text="发送延时" android:id="@+id/send" android:layout_width="match_parent" android:layout_height="wrap_content" /></LinearLayout>
3.2,以下是主要功能代码“:
import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import android.widget.Toast;public class Progress extends AppCompatActivity { private final int flag=1; private ProgressBar progressBar; private Button sennd; int amount = 0; private Handler handler= new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case flag: progressBar = (ProgressBar) findViewById(R.id.process); if (amount!=100){ handler.sendEmptyMessageDelayed(flag,1000); amount++; progressBar.setProgress(amount); }else { Toast.makeText(Progress.this, "下载完成", Toast.LENGTH_SHORT).show(); } break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_progress); initView(); } private void initView() { progressBar = (ProgressBar) findViewById(R.id.process); sennd = (Button) findViewById(R.id.send); sennd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Thread thread = new Thread(new Runnable() { @Override public void run() { handler.sendEmptyMessage(flag); } }); thread.start(); }; }); }}代码总体比较简单;但是在实现进度条的自增需要注意Hander延时发送信息写在if方法里,而多线程中只需要发送指令信息,不需要延时;
最终效果如下:
- Hander多线程实现ProgressBar的自动完成
- 自动完成的实现
- SHAutoComplete自动完成的实现
- Hander,多线程传递数据
- C# 多线程实现ProgressBar效果
- hander同步技巧 利用post之后的消息是最后完成的,实现同步。关键看waitDone的实现。带面精简Camera应用。
- VB6 实现文本框的自动完成功能
- Delphi6 实现文本框的自动完成功能
- 一个 AngularJS 的自动完成 UI 实现
- Ajax实现文本框的自动完成功能
- 表单中邮箱自动完成的实现
- php+validate实现文本框的自动完成
- filter完成自动登录的代码实现
- webview完成网页加载后progressbar自动隐藏
- Android开发(14)-- 多线程中实现利用自定义控件绘制小球并完成小球自动下落的功能
- Android开发(14)-- 多线程中实现利用自定义控件绘制小球并完成小球自动下落的功能
- ProgressBar进度条的实现
- 实现自动完成功能
- Shiro限制登录尝试次数
- 一起Talk Android吧(第二十九回:Android中的Activity一)
- 类集框架初识
- shll编程
- dockerfile简单使用
- Hander多线程实现ProgressBar的自动完成
- 用nodeJS搭建简单的静态服务
- JavaScript页面加载进度条
- hibernate多对多关系---【小白系列】0基础到熟练应用hibernate框架(十三)
- func_get_arg(),func_get_args()和func_num_args()的用法
- Leetcode442. Find All Duplicates in an Array
- JavaScript中本地对象、内置对象和宿主对象
- 分离链接法的删除操作函数
- 微信支付爬坑记——微信支付开发出现redirect_uri参数错误的解决方法