22、多进程和多线程

 Android进程简介

Android会启动一个LINUX进程和一个主线程。默认的情况下,所 有该程序的组件都将在该进程中运行。当启动应用程序时,Linux会为每 一个程序单独分配一个进程,该进程默认只拥有一个主线程。

组件可以运行在当前进程中,也可以运行在其他进程中。组件运行在 哪个进程中是在AndroidManifest.xml文件中设置的,其中<Activity>, <Service>,<receiver>和<provider>都有一个process属性来指定该 组件运行在哪个进程之中。

每一个进程不会创建新的线程,所有的处理事件都是在主线程中完 成的,例如,onClick。 

前台进程是用户当前正在使用的进程。只有一些前台进程可以在任何 时候都存在。他们是最后一个被结束的,当内存低到根本连他们都不能运 行的时候。一般来说, 在这种情况下,设备会进行内存调度,中止一些 前台进程来保持对用户交互的响应。 

可见进程不包含前台进程的组件。但是会在屏幕上显示一个可见的UI。 除非前台进程需要获取它的资源,不然不会被中止。

例如,如果前台Activity是一个对话框的话,就会允许在它后面看到 前一个Activity。 

(后台进程)后台不可见的进程。例如,后台运行的Activity、Service等。 

(空进程)未运行任何程序组件的线程。运行这些进程的唯一原因是作为一个缓 存,缩短下次程序需要重新使用的启动时间。系统经常中止这些进程,这 样可以调节程序缓存和系统缓存的平衡。 

 并发与UI更新

Handler    Message 

 

 1 import android.app.Activity;
 2 import android.os.Bundle;
 3 import android.os.Handler;
 4 import android.os.Message;
 5 import android.view.View;
 6 import android.widget.TextView;
 7 
 8 public class UpdateUIActivity extends Activity {
 9     private TextView mTextView;
10 
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_update_ui);
15         mTextView = (TextView) findViewById(R.id.textView1);
16     }
17 
18     public class NoHandler implements Runnable {
19         @Override
20         public void run() {
21             try {
22                 mTextView.setText("No Handler");
23             } catch (Exception e) {
24                 e.printStackTrace();
25             }
26         }
27     }
28 
29     // 不使用Handler
30     public void onClick_NoHandler(View view) {
31         // mHandler.post(new NoHandler());
32         Thread thread = new Thread(new NoHandler());
33         thread.start();
34     }
35     
36     // 使用Handler
37     public void onClick_Handler(View view) {
38         Thread thread = new Thread(new MyHandler(mHandler));
39         thread.start();
40     }
41     
42     public class MyHandler implements Runnable {
43         private Handler mHandler;
44 
45         public MyHandler(Handler handler) {
46             mHandler = handler;
47         }
48 
49         @Override
50         public void run() {
51             Message message = new Message();
52             message.obj = "Handler";
53             mHandler.sendMessage(message);
54         }
55 
56     }
57 
58     Handler mHandler = new Handler() {
59         @Override
60         public void handleMessage(Message msg) {
61             String str = String.valueOf(msg.obj);
62             mTextView.setText(str);
63         }
64     };
65 
66 }

 

 

 

 AsyncTask 

AsyncTask<Params, Progress, Result> 需要指定三个泛型 

 

 1 import android.app.Activity;
 2 import android.os.AsyncTask;
 3 import android.os.Bundle;
 4 import android.view.View;
 5 import android.widget.ProgressBar;
 6 import android.widget.TextView;
 7 import android.widget.Toast;
 8 
 9 public class AsyncTaskActivity extends Activity {
10     private ProgressBar mProgressBar;
11     private TextView mTextView;
12     private ProgressAsyncTask mProgressAsyncTask;
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_async_task);
18         mProgressBar = (ProgressBar) findViewById(R.id.progressBar1);
19         mTextView = (TextView) findViewById(R.id.textView1);
20     }
21 
22     private class ProgressAsyncTask extends AsyncTask<String, Integer, Integer> {
23         private int mCount;
24         @Override
25         protected Integer doInBackground(String... params) {
26             mProgressBar.setMax(params.length);
27             mCount = params.length;
28 
29             for (int i = 0; i < mCount; i++) {
30                 publishProgress(i + 1);
31                 if (isCancelled())
32                     break;
33                 try {
34                     Thread.sleep(2000);
35                 } catch (Exception e) {
36 
37                 }
38             }
39             return params.length;
40         }
41 
42         @Override
43         protected void onPostExecute(Integer result) {
44             super.onPostExecute(result);
45             Toast.makeText(AsyncTaskActivity.this, "任务完成,共处理" + result + "个值.",
46                     Toast.LENGTH_LONG).show();
47         }
48 
49         @Override
50         protected void onProgressUpdate(Integer... values) {
51             super.onProgressUpdate(values);
52             mProgressBar.setProgress(values[0]);
53             mTextView.setText(100 * values[0] / mCount + "%");
54         }
55 
56         @Override
57         protected void onCancelled() {
58             Toast.makeText(AsyncTaskActivity.this, "任务已取消", Toast.LENGTH_LONG)
59                     .show();
60 
61             super.onCancelled();
62         }
63 
64     }
65 
66     public void onClick_Start(View view) {
67         mProgressAsyncTask = new ProgressAsyncTask();
68         mProgressAsyncTask.execute("str1", "str2", "str3", "str4", "str5");
69     }
70 
71     public void onClick_Cancel(View view) {
72         mProgressAsyncTask.cancel(true);
73     }
74 }

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker小白到实战之常用命令演示,通俗易懂

前言上一篇大概认识了Docker&#xff0c;主要是从概念、架构、优点及流程方面进行阐述&#xff0c;并进行安装和体验&#xff1b;接下来就开始进行实操学习&#xff0c;在演示过程中会针对关键的知识点进行归纳和总结&#xff0c;这里先从常用命令说起&#xff0c;来吧&#xf…

今天这个日子,大多数人都不知道…

全世界只有3.14 % 的人关注了爆炸吧知识我是蝙蝠&#xff0c;身体虽小五毒俱全你确定要尝吗&#xff1f;我是果子狸&#xff0c;人们一度“谈我色变”但如今又被端上餐桌&#xff01;我是野兔&#xff0c;人们说我很可爱我的肉却变成“野味”毛发变成皮草……今天&#xff0c;世…

Python办公自动化Day2-openpyxl

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;常规操作添加数据遍历所有单元格数据合并/取消合并单元格添加/删除行与列移动指定范围单元格 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程语言基础&#xff0c;非编程小白&#xff09;的 Python办公自动化自学笔记知识…

传递函数_使用python计算麦克风阵列信号的传递函数

使用python写了一个测试麦克风阵列传递函数的demo&#xff0c;有需要的自取。该代码使用了第三方库ThinkDSP。1. 传递函数首先解释下什么是传递函数&#xff1a;把具有线性特性的对象的输入与输出间的关系&#xff0c;用一个函数(输出波形的拉普拉斯变换与输入波形的拉普拉斯变…

中国数学竞赛史上最玩命的“赌徒”,为了国家荣誉,他不惜用生命换来了五次世界第一...

全世界只有3.14 % 的人关注了爆炸吧知识知识君今天&#xff0c;要跟大家介绍的是&#xff0c;北大历史上首位被授予博士学位的人&#xff0c;深受癌症折磨的同时还带领着中国学子连续5次站上世界顶端的人&#xff0c;他的故事&#xff0c;他的品格&#xff0c;值得被所有人记住…

javq接口_Java为什么要使用接口_java接口怎么使用

Java接口是什么Java接口是一系列方法的声明&#xff0c;是一些方法特征的集合&#xff0c;一个接口只有方法的特征没有方法的实现&#xff0c;因此这些方法可以在不同的地方被不同的类实现&#xff0c;而这些实现可以具有不同的行为(功能)。接口(英语&#xff1a;Interface)&am…

[(转)hystar整理]Entity Framework 教程

预备知识 2 LINQ技术 2 LINQ技术的基础 - C#3.0 2 自动属性 2 隐式类型 2 对象初始化器与集合初始化器 3 匿名类 3 扩展方法 4 Lambda表达式 4 .NET中的数据访问 4 DataSet方案 5 改进的的DataSet方案 5 手写代码通过ADO.NET2…

13岁上中科大,17岁攻读哈佛博士,“天才”尹希的开挂人生

全世界只有3.14 % 的人关注了爆炸吧知识2013年美国斯隆基金会(Alfred P. Sloan Foundation)颁发的美国斯隆研究奖获得者尹希&#xff0c;31岁哈佛最年轻的华人教授&#xff0c;获2017年“豪华版诺贝尔奖”之称的科学突破奖-物理学新视野奖&#xff0c;这年唯一的获奖华裔。知识…

强制升级?!.NET Core 2.1容器镜像将从Docker Hub中删除

前言.NET Core 2.1将于2021年8月21日结束支持&#xff0c;本来应该没什么影响&#xff0c;该怎么用继续用得了。但是&#xff0c;如果你在生产环境使用了.NET Core 2.1容器镜像&#xff0c;那就要注意了&#xff0c;从8月21日开始&#xff0c;.NET Core 2.1容器镜像将不再在Doc…

“史上“最疯狂”的顶级数学家,看完后忍不住感慨太神了”

▲ 点击查看说起世界上最顶级的数学家&#xff0c;你的脑海中会浮现的&#xff0c;大概是欧拉、高斯、香农等数学巨匠。但是要说起成就和神秘性兼备的&#xff0c;一定就是——称为印度之子的——拉马努金。1887年12月22日&#xff0c;拉马努金出生在印度一个穷困潦倒的家庭&am…

致家长:疫情期间教育好自己的孩子,就是你最重要的事业!

全世界只有3.14 % 的人关注了爆炸吧知识疫情危机&#xff0c;却也是教育的契机。现在孩子呆在家里&#xff0c;老师管不了孩子&#xff0c;却也正是家长重新认识父母之责的契机。家长才是孩子的第一任老师&#xff0c;家长的言传身教、一举一动都影响着孩子成长。孩子是你的唯一…

设计模式之访问者

访问者模式介绍访问者模式能将算法与其所作用的对象隔离开来。访问者模式建议将新行为放入要给名为访问者的独立类中&#xff0c;而不是试图将其整合到已有类中。它允许你在不修改已有代码的情况下向已有类层次结构中增加新的行为。需要执行操作的原始对象将作为参数被传递给访…

转-SQL 2005修改系统表

FROM&#xff1a;http://blog.csdn.net/liangCK/archive/2008/10/07/3029315.aspx 在 SQL Server 2000 中修改系统表的方法大部分人都知道&#xff0c;介绍如何在 SQL 2005 中修改系统表的资料目前还比较少&#xff0c;虽然微软不赞成修改系统表&#xff0c;而且也把修改系统表…

清华男神再获世界大奖,从放牛娃到清华校长,他考研3次,读博7年,做出诺奖级的科研成果...

全世界只有3.14 % 的人关注了爆炸吧知识2月24日&#xff0c;菲列兹伦敦奖评奖委员会宣布&#xff0c;2020年度菲列兹伦敦奖将授予中国科学院院士、清华大学副校长、北京量子信息科学研究院院长薛其坤。帅气的老薛按照评奖委员会的通知&#xff0c;薛其坤是因为在实验上发现量子…

介绍自定义JDataGrid电子表格版本公式中的函数?

2019独角兽企业重金招聘Python工程师标准>>> How to write function in JDataGrid Spreadsheet Edition? 1. Understand the formula and function API used in JDataGrid Spreadsheet Edition? Obviously you should understand the “Function” and it’s su…

最新研究!新冠病毒被定义为“大流行”背后,竟然还藏着这样凶险的大杀器?...

全世界只有3.14 % 的人关注了爆炸吧知识你知道当一种疾病被定义为大流行&#xff08;pandemic&#xff09;时意味着什么吗&#xff1f;大流行&#xff08;pandemic&#xff09; 是指一种疾病在短时间内越过省界国界甚至洲界在全世界范围内流行。历史上&#xff0c;有很多疾病都…

Linux下查看进程对应的命令绝对路径

为什么80%的码农都做不了架构师&#xff1f;>>> 由于开发环境混乱&#xff0c;多人共享一台物理机&#xff0c;部分软件不是通过系统管理软件中心安装&#xff08;例如&#xff1a;rpm&#xff0c;apt-get&#xff09;, 同时启动软件是在软件当前目录执行 ./XXX 。…

请收藏!这可能是目前最安全的数据加密传输解决方案

问题为了安全性起见&#xff0c;客户要求客户端必须将数据加密后才能传给服务端。起先&#xff0c;准备使用非对称加密&#xff08;RSA&#xff09;方式&#xff0c;但是发现它对原始文本长度有限制。而对称加密(AES)没有长度限制&#xff0c;但是使用固定密钥存在暴露的风险。…

厉害了!平均年龄8岁的抽象派画家,网友笑称:这些作品,康定斯基看了都得服气!...

全世界只有3.14 % 的人关注了爆炸吧知识在孩子们的眼中&#xff0c;世间万物都被赋予了无限的想象力&#xff0c;而绘画是他们独特想法和思维的表达。小鸟为什么在水里&#xff1f;因为它想学习游泳。鱼儿为什么会在天上&#xff1f;因为它想看看大地。一支小小的画笔&#xff…

Zabbix如何监控Windows机器

最近一直在研究Zabbix监控Windows机器&#xff0c;涉及到如何快速安装agent,如何修改和完善windows监控模板等等。想把自己的经验给大家分享一下&#xff0c;希望对大家有所帮助。1)安装agent客户端 首先分享一下用bat写的自动化安装Windows机器的agentd安装脚本,脚本里面的tc…