在Android里面,后台的任务下载功能是非常常用的,比如在APP Store里面下载应用,下载应用时,需要跟用户进行交互,告诉用户当前正在下载以及下载完成等。

今天我将通过使用Android的原生控件 ProgressDialog 来实现一个“模拟后台下载”的效果。实现思路如下:

  1. 用户点击按钮,模拟开始下载

  2. 显示一个进度框,并修改后台界面上的文字,告知用户当前正在下载、需要等待

  3. 开启一个线程,模拟后台下载任务,假设下载需要3秒钟完成,让该线程等待3秒

  4. 线程执行完成后,关闭进度框,并更新界面上的文字,告知用户下载完成

源码如下:

1、主Activity

`public class ProgressDialogDemo extends Activity {

private Button button;

private TextView textView;

private ProgressDialog mDialog;

@Override
protected void onCreate(Bundle onSavedInstance) {
super.onCreate(onSavedInstance);
setContentView(R.layout.progress_dialog_demo); button = findViewById(R.id.buttonProgressDialog);
textView = findViewById(R.id.textView6); button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { // 创建并显示进度加载框
mDialog = ProgressDialog.show(ProgressDialogDemo.this,
"Please wait..",
"Calculating in the background...",
true); // 设置文字内容,告诉用户当前正在后台计算
textView.setText("Calculating in the background..."); new Thread() {
@Override
public void run() {
try { // 模拟耗时的后台计算
sleep(3000);
} catch (InterruptedException e) { } finally { // 耗时的后台计算完成,关闭进度框,再次以文字的形式告诉用户
mDialog.dismiss();
refreshTextView();
}
}
}.start();
}
});
} private void refreshTextView() {
textView.post(new Runnable() {
@Override
public void run() { // 需要在主线程去重新设置文字
textView.setText("Done with calculating.");
}
});
}

}`

2、布局文件progress_dialog_demo.xml:

`

<TextView
android:paddingTop="20dp"
android:text="This is a progress dialog demo."
android:layout_width="match_parent"
android:layout_gravity="center"
android:layout_height="wrap_content" android:id="@+id/textView6"/>
<Button
android:text="Start Background Calculating"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:id="@+id/buttonProgressDialog"/>

`

3、效果图如下:(注意看后台界面上文字的变化)

不过,这个 ProgressDialog类从Android 8.0开始被废弃了,因为这个类有个缺点是:

该框显示时,用户无法跟应用进行交互。

建议使用 ProgressBar 或者通知 Notification代替,后面会分享 ProgressBar 的使用。

【Android初级】如何实现一个“模拟后台下载”的加载效果(附源码)的更多相关文章

  1. cesium 入门开发系列矢量瓦片加载展示(附源码下载)

    前言 cesium 入门开发系列环境知识点了解:cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等cesium 在线例子 内容概览 cesium 实现矢量瓦片加载效果 源代 ...

  2. 使用 SVG 实现一个漂亮的页面预加载效果

    今天我们要为您展示如何使用 CSS 动画, SVG 和 JavaScript 创建一个简单的页面预加载效果.对于网站来说,这些预载入得画面提供了一种创造性的方法,使用户在等待内容加载的时候不会那么无聊 ...

  3. cesium 实现风场图效果(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  4. Android 音视频深入 十九 使用ijkplayer做个视频播放器(附源码下载)

    项目地址https://github.com/979451341/Myijkplayer 前段时候我觉得FFmpeg做个视频播放器好难,虽然播放上没问题,但暂停还有通过拖动进度条来设置播放进度,这些都 ...

  5. Android网络:HTTP之利用HttpURLConnection访问网页、获取网络图片实例 (附源码)

    http://blog.csdn.net/yanzi1225627/article/details/22222735 如前文所示的TCP局域网传送东西,除了对传输层的TCP/UDP支持良好外,Andr ...

  6. 一个基于jQuery写的弹窗效果(附源码)

    最近项目中频繁遇到需要弹出窗口的功能,一直使用浏览器默认的Alert和Confirm弹窗,感觉视觉效果不是那么好,而从网上下载的话又找不到合适的,找到的话有些也是十分臃肿,有时候感觉学习配置的功夫自己 ...

  7. cesium1.65api版本贴地贴模型标绘工具效果(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  8. openlayers6实现webgl点图层渲染效果(附源码下载)

    前言:openlayers6推出来的有一段时间,推出来的新特性见:https://github.com/openlayers/openlayers/releases/该版本的主要功能是能够组合具有不同 ...

  9. cesium1.63.1api版本贴地贴模型量算工具效果(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材.不少 ...

随机推荐

  1. Mysql技术内幕之InnoDB锁探究

    自7月份换工作以来,期间一直在学习MySQL的相关知识,听了一些视频课,但是一直好奇那些讲师的知识是从哪里学习的.于是想着从书籍中找答案.毕竟一直 看视频也不是办法,不能形成自己的知识.于是想着看书汲 ...

  2. openstack高可用集群19-linuxbridge结合vxlan

    生产环境,假设我们的openstack是公有云,我们一般的linuxbridge结合vlan的模式相对于大量的用户来说是vlan是不够用的,于是我们引进vxlan技术解决云主机内网网络通讯的问题. 我 ...

  3. 简单谈谈contextlib的使用

    简单谈谈contextlib的使用 写在前面 做这件事的原因: 在看书的时候,我发现了有大佬们用contextlib管理上下文,真的很牛皮,但是百度了以下,每个大佬都写了很多很全很深刻,讲道理五花八门 ...

  4. 机器学习 第4篇:数据预处理(sklearn 插补缺失值)

    由于各种原因,现实世界中的许多数据集都包含缺失值,通常把缺失值编码为空白,NaN或其他占位符.但是,此类数据集与scikit-learn估计器不兼容,这是因为scikit-learn的估计器假定数组中 ...

  5. java实现读取excel文件内容

    package excel; import java.io.FileInputStream; import java.io.InputStream; import java.text.SimpleDa ...

  6. Java连接MySQL数据库——含详细步骤和代码

    工具:eclipse.MySQL.MySQL连接驱动:mysql-connector-java-5.1.45.jar 首先要下载Connector/J地址:http://www.mysql.com/d ...

  7. [leetcode712]202. Happy Number判断快乐数字

    题目很简单,就是用哈希表存,判断有没有重复 学到了:java中字符串的比较有两种: 1.==这种是比较引用,只用两个字符串变量指向同一个地址才相等 2..equals()这种是值的比较,只要两个字符串 ...

  8. HTML中,大小不确定图片的水平垂直居中

    html: css: div{ width:400px;height:300px;text-align:center;font-size:0;*font-size:200px;} div:after{ ...

  9. POLARDB与其他关系型数据库对比

    https://baijiahao.baidu.com/s?id=1610828839695075926&wfr=spider&for=pc 前言 在数据库的选择上,MySQL成为中国 ...

  10. Docker学习(二)- Docker 安装 Jenkins

    一.拉取镜像 我这里安装的版本是2.222.3-centos,可以去这里获取你需要的版本: https://hub.docker.com/_/jenkins?tab=tags docker pull ...