[Android] ProgressDialog与耗时操作
来源:互联网 发布:十大神优化游戏 编辑:程序博客网 时间:2024/05/29 14:33
ProgressDialog与耗时操作
今天来研究一下ProgressDialog与耗时操作,相信大家平时经常会看到在执行耗时操作时界面会有一个圆圈一直转,常见的比如网络请求时就经常会出现,虽然很简单,但是还是想亲自尝试一下!
这其中会涉及到单个知识点,一个是ProgressDialog的使用,一个是Handler的使用,还有一个就是线程的使用,具体ProgressDialog怎么使用,Handler的用法以及内部实现原理,大家可以去Google查找相关资料以加深理解。
代码分析
activity_main.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" tools:context="com.glemontree.progressdialogtest.MainActivity"> <Button android:id="@+id/download" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始下载" /></LinearLayout>
布局文件不要太简单。。就放置了一个Button,没什么好说的。。
MainActivity.class
package com.glemontree.progressdialogtest;import android.app.ProgressDialog;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity { private Button mDownloadButton; private static final int SHOW = 1; private static final int HIDE = 0; private ProgressDialog mProgressDialog = null; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case SHOW: mProgressDialog = ProgressDialog.show(MainActivity.this, "test", "This is a test"); break; case HIDE: mProgressDialog.dismiss(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDownloadButton = (Button) findViewById(R.id.download); mDownloadButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handler.sendEmptyMessage(SHOW); new Thread() { public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendEmptyMessage(HIDE); } }.start(); } }); }}
大家都知道更新UI只能在主线程中进行更新,因此如果将耗时操作放置在另外一个线程中完成,当耗时操作执行完成后若要更新UI,其实有两种方法:
- runOnUiThread
- Handler
我这里使用的是Handler机制,主要是在主线程中建立Handler,在建立Handler的同时需要实现其handleMessage(Message msg)方法,该方法由用户实现,可以根据不同的msg实现不同的操作,在上面的程序中,主要是根据msg的内容实现ProgressDialog的显示和消失。
在Button的点击事件中,首先通过Handler发送SHOW消息,然后消息到达handlerMessage(Message msg)方法中后由于是SHOW消息所以会显示ProgressDialog;然后会开启一个线程,在线程中睡眠3S用来模拟耗时操作的执行,当耗时操作执行完成后再发送HIDE消息,消息到达handlerMessage(Message msg)方法中后由于是HIDE消息所以ProgressDialog消息。这就是整个程序的功能!
后续工作
- 研究一下Handler的实现机制
- [Android] ProgressDialog与耗时操作
- ProgressDialog和Thread结合处理耗时操作
- UI与耗时操作
- Android 中UI与耗时操作的分离
- android ProgressDialog与webview
- 耗时操作与UI改变
- Android核心基础-6.Android 耗时操作
- AsyncTask与ProgressDialog使用笔记(安卓在背景运行耗时任务)
- Android中用于耗时的一个程序分析(利用ProgressDialog)
- Android开发中的耗时操作总结
- android GpuImage色彩空间转换耗时操作
- android 开启线程查询数据,耗时操作
- Android关于service中的耗时操作
- android中ProgressDialog与ProgressBar的使用
- android中ProgressDialog与ProgressBar的使用
- android-progressDialog
- Android ProgressDialog
- Android ProgressDialog
- C# Is AS 的区别
- Voice Conversion 项目笔记(含从VCC 2016匿名比赛深挖的各前沿方法性能对比)
- redis-sentinel安装配置
- React前端开发入门与实战案例
- nginx限流方案
- [Android] ProgressDialog与耗时操作
- C++ 左值和右值,左值引用和右值引用
- 大数据Hive的简介和安装_03_01
- 插入排序
- 解决Qt :libpng warning: iCCP: known incorrect sRGB profile警告信息
- Canvas的使用以及方法整理
- spark streaming 读取kafka 配置
- PAT乙级1051. 复数乘法 (15)
- 错误:ActionEnter cannot be resolved to a type