文档章节

Android学习--12-多线程

ssnoodles
 ssnoodles
发布于 2016/10/19 14:57
字数 500
阅读 21
收藏 0

说说遗留的问题

碎片( Fragment)

第4章 看得挺头疼,没弄明白,不写了。

第8章 多媒体,例子很多。

对于像我一样的初学者来说,这书入门挺好,建议购买,网上也有此书每章的源码。

文章都不是写的很详细,就写点要点,防止自己忘记。

后面的问题

粗看比较快,在看书中的天气实例。 码云weatherSimple,后续有空会写实例步骤。

多线程

java的多线程就不介绍了

Handler

Android 不允许在子线程中进行UI操作

所以Android提供了异步消息处理机制

异步消息,应该有哪些组成?

  1. 消息 Message
  2. 处理消息 Handler
  3. 消息队列 MessageQueue
  4. 管理消息队列 Looper

输入图片说明

public class MainActivity extends Activity implements OnClickListener {
    public static final int UPDATE_TEXT = 1;
    private TextView text;
    private Button changeText;
    private Handler handler = new Handler() {
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case UPDATE_TEXT:
        // 在这里可以进行UI操作
            text.setText("Nice to meet you");
            break;
        default:
            break;
        }
    }
};
……
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.change_text:
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Message message = new Message();
                    message.what = UPDATE_TEXT;
                    handler.sendMessage(message); // 将Message对象发送出去
                }    
        }).start();
            break;
        default:
            break;
        }
    }
}

使用AsyncTask

使用方法 继承AsyncTask

class DownloadTask extends AsyncTask<Void, Integer, Boolean> {
    ……
}

然后启动 new DownloadTask().execute();

四个可以重写的方法:

  1. onPreExecute() 前执行
  2. doInBackground(Params...) 执行中,不可以对UI进行操作 ,但可以 publishProgress()来切换到UI 线程
  3. onProgressUpdate(Progress...) 执行中,可以对UI进行操作
  4. onPostExecute(Result) 执行完后
class DownloadTask extends AsyncTask<Void, Integer, Boolean> {
    @Override
    protected void onPreExecute() {
        progressDialog.show(); // 显示进度对话框
    }
    @Override
    protected Boolean doInBackground(Void... params) {
        try {
            while (true) {
                int downloadPercent = doDownload(); // 这是一个虚构的方法
                publishProgress(downloadPercent);
                if (downloadPercent >= 100) {
                    break;
                }        
          }
    } catch (Exception e) {
        return false;
    }
    return true;
}

    @Override
    protected void onProgressUpdate(Integer... values) {
        // 在这里更新下载进度
        progressDialog.setMessage("Downloaded " + values[0] + "%");
    }
    @Override
    protected void onPostExecute(Boolean result) {
        progressDialog.dismiss(); // 关闭进度对话框
        // 在这里提示下载结果
        if (result) {
            Toast.makeText(context, "Download succeeded",
            Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, " Download failed",
            Toast.LENGTH_SHORT).show();
        }
    }
}

© 著作权归作者所有

ssnoodles
粉丝 2
博文 31
码字总数 9574
作品 0
张家港
私信 提问
这是一份全面 & 详细的Android多线程知识总结指南

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的Android多线程学习指南,希望你们喜欢。 目录 1. 多线程基础知识 在了解Android多线程实现...

Carson_Ho
2019/06/26
0
0
Android:关于多线程的总结知识都在这里了!

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的Android多线程学习指南,希望你们喜欢。 目录

Carson_Ho
2019/05/22
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
我想邀请你和我一起学Android

初衷 如果你也学习Android,那么你大概率会在博客上看过我的文章: 附:各大技术社区的个人链接 CSDN:blog.csdn.net/carson_ho 简书:www.jianshu.com/u/383970bef… 稀土掘金:juejin.im/u...

Carson_Ho
2019/05/10
0
0
Android多线程:这是一份全面 & 详细的HandlerThread学习指南

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的机制的学习指南,内容包括:定性认知、定量使用、工作原理 & 源码分析,希望你们会喜欢。...

Carson_Ho
2019/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

检查字符串是否不为空且不为空

如何检查字符串是否不为null也不为空? public void doStuff(String str){ if (str != null && str != "**here I want to check the 'str' is empty or not**") { /* handl......

javail
4分钟前
7
0
No module named 'apscheduler.schedulers'

关于 ModuleNotFoundError: No module named 'apscheduler.schedulers' 和 ModuleNotFoundError: No module named 'apscheduler' 的问题,网上有不少解决。大多数都是因为,文件起名与模块名......

開援带碼
26分钟前
27
0
如何查看Android的系统版本?

有谁知道我怎么能检查系统版本(例如1.0 , 2.2 ,等)编程? #1楼 我无法对答案发表评论,但是Kaushik的答案存在一个严重错误:SDK_INT与系统版本不同,但实际上是指API级别。 if(Build.VER...

技术盛宴
51分钟前
35
0
引入AI变量,精准农业正在加速豹变?

  不久前,“江苏省脱贫率达 99.99%,尚未脱贫人数仅剩 6 户、17 人”这样一则新闻刷屏。“把这 17 个人迁出,江苏就全省脱贫”、“最后这 6 户人家拖了后腿”,在网民们的调侃和质疑声背后...

水果黄瓜
55分钟前
41
0
Elasticsearch系列---结构化搜索

概要 结构化搜索针对日期、时间、数字等结构化数据的搜索,它们有自己的格式,我们可以对它们进行范围,比较大小等逻辑操作,这些逻辑操作得到的结果非黑即白,要么符合条件在结果集里,要么...

清茶豆奶
今天
69
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部