当前位置:首页 » 安卓系统 » android线程运行

android线程运行

发布时间: 2022-06-03 09:17:00

Ⅰ android怎么让代码在UI线程运行

稍微有过Andorid开发经验的同学都知道,Android开发中涉及到UI变动的操作,必须在主线程中执行, 否则会crash
这就需要我们将代码抛到主线程执行。
第一种方式,是通过Activity.runOnUiThread()来做。这不是一个好方法,毕竟Activity这种东西,在子线程中可遇不可求。也千万不要因此而将Activity传来传去,甚至对Context进行强转,那样太过难看。
那么,只剩下通过Handler手动将代码抛到主线程了。这就需要,Handler具有主线程的Looper对象。具体的原因可以参考我之前的博客:【Android】结合源码解析Android消息队列工作流程 。
两种实现方式:
1. 在主线程中创建Handler
2. 直接通过MainLooper,构造handler
http://blog.csdn.net/u013015161/article/details/52760207

Ⅱ Android中线程与线程,进程与进程之间如何通信

使用handler发送message,消息队列排队

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。
进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。
线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。线程的运行中需要使用计算机的内存资源和CPU。

Ⅲ android中主线程执行时,子线程执行吗

执行,但一般不与视图交互,因为在android 中还有一个headler概念,我对这块也不是特别清楚

Ⅳ Android中的线程与进程之间的关系简单解释

一、Android中的进程
当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程。默认的情况下,所有该程序的组件都将在该进程和线程中运行。 同时,Android会为每个应用程序分配一个单独的LINUX用户。Android会尽量保留一个正在运行进程,只在内存资源出现不足时,Android会尝试停止一些进程从而释放足够的资源给其他新的进程使用, 也能保证用户正在访问的当前进程有足够的资源去及时地响应用户的事件。
我们可以将一些组件运行在其他进程中,并且可以为任意的进程添加线程。组件运行在哪个进程中是在manifest文件里设置的,其中<Activity>,<Service>,<receiver>和<provider>都有一个process属性来指定该组件运行在哪个进程之中。我们可以设置这个属性,使得每个组件运行在它们自己的进程中,或是几个组件共同享用一个进程,或是不共同享用。<application>元素也有一个process属性,用来指定所有的组件的默认属性。
Android中的所有组件都在指定的进程中的主线程中实例化的,对组件的系统调用也是由主线程发出的。每个实例不会建立新的线程。对系统调用进行响应的方法——例如负责执行用户动作的View.onKeyDown()和组件的生命周期函数——都是运行在这个主线程中的。这意味着当系统调用这个组件时,这个组件不能长时间的阻塞主线程。例如进行网络操作时或是更新UI时,如果运行时间较长,就不能直接在主线程中运行,因为这样会阻塞这个进程中其他的组件,我们可以将这样的组件分配到新建的线程中或是其他的线程中运行。
二、Android中的线程
线程在代码是使用标准的java Thread对象来建立,那么在Android系统中提供了一系列方便的类来管理线程——Looper用来在一个线程中执行消息循环,Handler用来处理消息,HandlerThread创建带有消息循环的线程。
三、进程与线程的关系
它们之间的区别:

1、线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程。
2、一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。
3、系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。那就是说,出了CPU之外(线程在运行的时候要占用CPU资源),计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
4、与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。
5、进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。
它们之间的联系:
简单的说就是:一个程序包含进程,进程又包含线程,线程是进程的一个组成部分,进程是操作系统分配资源的基本单位,线程是不会分配资源的,一个进程可以包含多个线程,然后这些线程共享进程的资源。
分开来说就是:
线程是进程的一个实体,是CPU 调度和分配的基本单位,其本身不拥有系统资源,只含有程序计数器、寄存器和栈等一些运行时必不可少的基本资源。同属一个进程的线程共享进程中的全部资源。
进程是系统资源分配时的一个基本单位,拥有一个完整的虚拟空间地址。
系统在运行的时候会为每个进程分配不同的内存区域。
线程组只能共享资源,即除了CPU外,计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。

Ⅳ Android里有哪些方法启动线程

其实Android启动线程和JAVA一样有两种方式,一种是直接Thread类的start方法,也就是一般写一个自己的类来继承Thread类。另外一种方式其实和这个差不多啊! 那就是Runnable接口,然后把Runnable的子类对象传递给Thread类再创建Thread对象.总之都是需要创建Thread对象,然后调用Thread类的start方法启动线程。区别就是,一个是直接创建Thread对象,另外一个是需要implement了Runnable接口对象作为创建Thread对象的参数。Runnable其实我们称为线程任务。
第一种方式一般是这样用:
Class MyThread extends Thread{
public void run(){
//你要实现的代码
}
}
在主线程中启动这个线程:
public class Test{
public static void main(String[] args){
new MyThread().start();//启动了我们的线程了
}
}
2,第二种方式一般是这样用:
public class MyRunnable implements Runnable{
public void run(){
//你需要实现的代码
}
}
在主线程中启动这个线程:
public class Test{
public static void main(String[] args){
Thread t=new Thread(new MyRunnable());//这里比第一种创建线程对象多了个任务对象
t.start();
}
}
这里我想说的是可能你问这个问题是接触到了Android中的Handler概念:
其实Handler并不是开辟新线程的概念,Android主要的考虑到更新界面的问题,一般情况下,更新界面(Activity)都是在主线程中更新的,这样就遇到了一个问题,比方说:在下载文件时候我们需要进度条显示下载进度,界面需要更新(数据是不断变的,也就是下载的大小是不断变的,要是直接在主线程中更新,就会造成程序的堵塞,程序很容易崩溃,通常这样联网耗时的工作需要开辟另外一个线程的,这样就不会影响主程序了),好了,到这里联网操作一般都需要开辟新线程了吧。。
接下来就来说Handler了,刚刚我说了Handler不是开辟新线程,在我看来,Handler更像是主线程的秘书,是一个触发器,负责管理从子线程中得到更新的数据,然后在主线程中更新界面。简单说下进度条的那个:
下载了多少的数据都是在子线程中得到的,在子线程中通过Handler的sendMessage()方法发送得到的下载的数据,当你调用了sendMessage方法后,Handler就会回调(也就是自动调用)Handler中的 HandlerMessage方法。
我很认真写了,希望分给我! 要是还有不懂的,可以追问,总之Handler不是开辟线程,开辟线程的方式就和JAVA一样的! 千万不要被Android中的Handler混淆。

Ⅵ 三,android系统的线程运行方式是怎样的,main thread 和 worker thread的各自作用

主线程呢,主要是负责一些界面的绘制和刷新,但非主线程呢,主要是进行一些数据的获取、网络的请求等等一些耗时的操作。

热点内容
王者荣耀如何设置自己账号密码 发布:2025-05-20 06:23:02 浏览:725
虞姬的脚本 发布:2025-05-20 06:23:00 浏览:119
java发送手机短信 发布:2025-05-20 06:21:56 浏览:706
python编程符号大全 发布:2025-05-20 06:20:37 浏览:550
大学压缩课 发布:2025-05-20 06:19:49 浏览:859
关于五的乘法运算文字脚本 发布:2025-05-20 06:11:22 浏览:684
androidhttp乱码 发布:2025-05-20 06:00:39 浏览:855
拉伸压缩 发布:2025-05-20 05:45:30 浏览:926
阿里云的服务器修建在哪里 发布:2025-05-20 05:44:49 浏览:770
网盘存储文件 发布:2025-05-20 05:32:05 浏览:245