在android的设计思想中,为了确保用户顺滑的操作体验。一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务。因此我们必须要重新开启一个后台线程运行这些任务。然而,往往这些任务最终又会直接或者间接的需要访问和控制UI控件。例如访问网络获取数据,然后需要将这些数据处理显示出来。就出现了上面所说的情况。原本这是在正常不过的现象了,但是android规定除了UI线程外,其他线程都不可以对那
转载
2023-08-22 20:16:30
66阅读
ActivityThread在Android中它就代表了Android的主线程,但是并不是一个Thread类。严格来说,UI主线程不是ActivityThread。ActivityThread类是Android APP进程的初始类,它的main函数是这个APP进程的入口。APP进程中UI事件的执行代码段都是由ActivityThread提供的。也就是说,Main Thread实例是存在的,只是创建
转载
2023-06-16 19:31:34
233阅读
如果某个应用程序组件是第一次被启动,且这时应用程序也没有其他组件在运行,则Android系统会为应用程序创建一个包含单个线程的linux进程。默认情况下,同一个应用程序的所有组件都运行在同一个进程和线程里(叫做“main”主线程)。如果组件启动时,已经存在应用程序的进程了(因为应用程序的其它组件已经在运行了),则此组件会在已有的进程和线程中启动运行。如果组件想在指定的进程里运行,可以为任何进程创建
转载
2023-08-10 18:34:32
88阅读
1.主线程和子线程 主线程就是主指UI线程,然而在android系统中一般不能在UI线程中进行耗时比较大的操作,这个时候就需要引进子线程去处理,android里有几个特殊的线程封装,分别是AsyncTask ThreadHandler IntentService2.AsyncTask 使用场景:AsyncTask是轻量级的异步任务类,他可以在线程池
转载
2023-06-26 20:24:30
135阅读
在Android系统中,每当我们新启动一个Application(应用程序),就会启动一个主线程。主线程的入口是基于main函数的。Android程序中的主线程,又称为UI线程,这是因为所有UI界面的绘制事件都只能在主线程中操作。主线程负责UI事件的分发。系统不会为每个组件单独创建线程,在同一个进程里的UI组件都会在UI线程里实例化,系统对每一个组件的调用都从UI线程分发出去。结果就是,响应系统回
转载
2023-07-28 16:25:14
158阅读
如果在Android中判断某个线程是否是主线程?对于这个问题,你可能说根据线程的名字,当然这个可以解决问题,但是这样是最可靠的么?万一某天Google一下子将线程的名字改称其他神马东西呢。方法揭晓下面的方法是最可靠的解决方案。public static boolean isInMainThread() {
return Looper.myLooper() == Looper.getMainLoop
转载
2023-12-26 21:35:45
43阅读
对于一个Android应用程序,当启动一个应用组件,并且此时没有其他应用组件运行时,Android系统会为该应用启动一个由一个线程执行的Linux进程。默认情况下,一个应用程序的所有组件都运行在该进程的线程中,我们称该线程为“主线程”。当然我们可以通过创建线程,为该应用程序后续启动的其他组件安排在单独的进程中执行。1进程&n
转载
2023-09-19 17:17:19
62阅读
在学习handler之前,我们可以先考虑一下以下几个问题?1、为什么要用handler?2、handler是什么?3、handler怎么用呢?4、handler的原理是什么?5、如何在主线程给子线程发送消息呢?问题一:android 为什么要设计只能通过handler机制更新UI?最根本的目的是解决多线程并发温问题:假设如果在一个activity当中,有多个线程去更新UI,并且都没有加锁机制,那
转载
2024-08-11 11:10:54
45阅读
作为 android 者对主线程的操作在开发中是非常频繁的,主线程是非常重要的线程,因为我们所有的UI界面都是通过主线程更新、绘制的。所以我们要足够了解他。从源码的角度看看为何ui必须在主线程更新、直接创建的handler为何就把线程给切换到了主线程呢?、主线程阻塞anr是如何抛出的?目录Android 主线程是在哪里创建的?在android开发中为什么子线程不能更新UI界面?直接创建的Handl
转载
2023-06-22 12:39:09
189阅读
1.ANR application not responding在主线程这做了耗时操作。 主要原因是:应用程序的响应性是Activity Manager和WindowManager系统服务监视的。(1)主线程被IO操作阻塞; (2)主线程中存在耗时的计算; 以下这些操作是发生在主线程中:Acitivity的所有生命周期回调都是执行在主线程Service默认是执行在主线程。BroadcastRece
转载
2023-06-28 15:58:20
115阅读
1.主线程和子线程主线程是指进程所拥有的线程,在Java中默认情况下一个进程只有一个线程,这个线程就是主线程。子线程也叫工作线程,除了主线程以外的线程都是子线程。Android沿用了Java的线程模型,其中的线程也分为了主线程和子线程,主线程也叫UI线程,其主要作用是运行四大组件以及处理它们和用户的交互,而子线程的作用则是执行耗时任务,比如网络请求,I/O操作等。从Android 3.0开始系统要
转载
2023-09-13 23:42:44
203阅读
Process and Threds(进程与线程)当应用程序组件启动和应用程序没有任何其他组件运行时,安卓系统启动了一个新的应用程序的一个新的应用程序线程的执行程序。默认情况下,同一个应用程序的所有组件都在同一个进程和线程中运行(称为“主线程”)。如果一个应用程序组件启动并且已经存在一个应用程序的进程(因为应用程序的另一个组件存在),那么这个组件就开始在这个过程中,并使用相同的执行线程然而(都在主
转载
2023-09-22 15:29:11
45阅读
不管是C++程序还是Java程序,都会有程序的入口,所有的Java应用程序都是从public static void main 开始,同样Android程序也有同样入口。 public class JavaStart{
public static void main(String... args) {
// The Java universe starts here.
}
} 那么
转载
2023-08-25 21:37:18
41阅读
前言:1.对Thread.sleep(long duration)的认知。 由于CPU分配的每个线程的时间片极为短暂(一般为几十毫秒),所以,CPU通过不停地切换线程执行,这样就给程序员一种错觉,以为多个线程是在同时执行。sleep就是正在执行的线程主动让出CPU,CPU去执行其他线程,在sleep指定的时间过后,
转载
2023-07-06 22:33:23
209阅读
andriod提供了 Handler 和 Looper 来满足线程间的通信。例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传递的。 在Android,这里的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper,这个事android的新 概念。我们的主线
转载
2023-09-02 13:04:36
115阅读
首先 先 明白一个问题:什么是ANRApplication Not Responding,意思是”应用没有响应“以前我的理解就是 “在主线程做了耗时操作”就会引起ANR,现在我觉得我是错误的,ANR的意思是应用没有响应,耗时操作实际上 并不一定会导致没有响应,我对没有响应的理解是有人(事件或操作)发出了一个请求,但是主线程没有对这个人进行反馈(可能是没时间、可能是不想理、可能是手被绑住了没有办法理
转载
2023-08-29 16:58:51
303阅读
知乎上看到这样一个问题Android中为什么主线程不会因为Looper.loop()里的死循环卡死?,于是试着对Handler源码重新看了一下,其实Android的消息机制是Pipe+epoll(了解epoll),有消息时则依次执行,没消息时调用epoll.wait等待唤醒;由于Android中生命周期、UI绘制都是动过Handler实现的,因此自然不会发生阻塞卡死。Android为了保证主线程在
转载
2023-07-31 23:15:40
165阅读
结论初始化后,所有主线程做的事情都是在looper.loop()中完成的,因为主线程不做其他事,所以不会卡死基于linux的epoll模型,当主线程没有message消费时,会进入睡眠状态(简单理解),等到有新的可消费的Message时,再转为活跃状态处理Message(类似一个事件回调)。主线程在睡眠状态会让出CPU,并不是一直不停在执行循环。如有兴趣了解下epoll机制可以看看这篇文章:NIO
转载
2023-11-08 08:56:17
180阅读
首先 先 明白一个问题:什么是ANRApplication Not Responding,意思是”应用没有响应“以前我的理解就是 “在主线程做了耗时操作”就会引起ANR,现在我觉得我是错误的,ANR的意思是应用没有响应,耗时操作实际上 并不一定会导致没有响应,我对没有响应的理解是有人(事件或操作)发出了一个请求,但是主线程没有对这个人进行反馈(可能是没时间、可能是不想理、可能是手被绑住了没有办法理
转载
2023-08-17 15:37:03
222阅读
首先 先 明白一个问题:什么是ANRApplication Not Responding,意思是”应用没有响应“以前我的理解就是 “在主线程做了耗时操作”就会引起ANR,现在我觉得我是错误的,ANR的意思是应用没有响应,耗时操作实际上 并不一定会导致没有响应,我对没有响应的理解是有人(事件或操作)发出了一个请求,但是主线程没有对这个人进行反馈(可能是没时间、可能是不想理、可能是手被绑住了没有办法理
转载
2023-07-31 20:15:33
156阅读