system_server进程准备工作:system_server进程收到attachApplication请求后,会进行一系列准备工作,如创建任务栈、设置进程间通信通道等。...主线程创建Activity:主线程收到LAUNCH_ACTIVITY消息后,会通过反射机制创建目标Activity实例,并回调Activity的生命周期方法,如onCreate()、onStart()、...3.1.2.2 与AMS的通信 ApplicationThread与AMS之间的通信是通过Binder IPC实现的。AMS是一个系统级服务,负责管理应用程序的生命周期、任务栈和进程。...这种通信机制确保了应用程序与系统服务之间的解耦和高效通信。...3.1.3 小结 ApplicationThread负责处理与系统服务(如AMS)之间的通信以及管理应用程序组件的生命周期。
使用弱引用(WeakReference)来避免强引用导致的内存泄漏。 避免在静态变量中持有Activity或Context的引用。 内存溢出通常是因为应用程序尝试加载的资源过大或者创建了过多的对象。...面试题目2:描述一下Android中的Binder机制,以及它是如何在不同进程间进行通信的。 解答: Binder是Android中的一种IPC(进程间通信)机制。...MVP:优点是将业务逻辑从View中分离,易于测试;缺点是可能需要更多的代码来处理Presenter和View之间的交互。...解答: Handler是Android中用于处理线程间通信的类。它允许你发送和处理Message或Runnable对象到一个线程的MessageQueue,并且可以异步地执行任务。...解答: Context是Android中一个非常基础的类,它提供了关于应用程序环境的信息,是许多其他类和方法的执行环境。
但是,您可以安排应用中的其他组件在单独的进程中运行,并为任何进程创建额外的线程。 本文档介绍进程和线程在 Android 应用中的工作方式。...系统绝对不会为每个组件实例创建单独的线程。运行于同一进程的所有组件均在 UI 线程中实例化,并且对每个组件的系统调用均由该线程进行分派。...要了解如何在这种重启情况下坚持执行任务,以及如何在 Activity 被销毁时正确地取消任务,请参阅书架示例应用的源代码。...但是,如果调用源自其他进程,则该方法将在从线程池选择的某个线程中执行(而不是在进程的 UI 线程中执行),线程池由系统在与 IBinder 相同的进程中维护。...进程间通信 Android 利用远程过程调用 (RPC) 提供了一种进程间通信 (IPC) 机制,通过这种机制,由 Activity 或其他应用组件调用的方法将(在其他进程中)远程执行,而所有结果将返回给调用方
servie是系统的组件,它由系统进程托管(servicemanager);它们之间的通信类似于client和server,是一种轻量级的ipc通信,这种通信的载体是binder,它是在linux层交换信息的一种...如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。...因此这里会出现一个问题:当 Activity 被 finish 之后,你不再持有该 Thread 的引用。另一方面,你没有办法在不同的 Activity 中对同一 Thread 进行控制。 ...这个时候当你 start 一个 Activity 就没有办法在该 Activity 里面控制之前创建的 Thread。...因此你便需要创建并启动一个 Service ,在 Service 里面创建、运行并控制该 Thread,这样便解决了该问题(因为任何 Activity 都可以控制同一 Service,而系统也只会创建一个对应
Linux 内核 Android的核心系统服务依赖于 Linux 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。...属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。...特别是,Activity应该在它的关键生命周期方法 (如onCreate()和onResume())里尽可能少的去做创建操作。...客户端基于 Android 平台进行开发。负责初始化通信过程,进行即时通信时,由客户端负责向服务器发起创建连接请求。...允许多个客户端同时登录并且并发的连接到一个服务器上。服务器对每个客户端的连接进行认证,对认证通过的客户端创建会话,客户端与服务器端之间的通信就在该会话的上下文中进行。
在C++中确保线程安全性和处理线程之间的同步和通信有多种方法。下面是一些常用的技术和技巧: 互斥锁:使用互斥锁可以确保只有一个线程可以访问共享资源。在访问共享资源之前获取锁,在完成后释放锁。...这可以防止多个线程同时访问同一份数据,从而避免数据竞争和不一致。 条件变量:条件变量用于线程之间的通信。一个线程可以等待某个条件成立,直到其他线程满足条件并通知它。...C++标准库提供了一些原子类型和操作,可以在多线程环境中进行原子操作。 锁粒度:选择适当的锁粒度可以提高并发性能。...C++标准库提供了一些线程安全的容器,如std::mutex、std::condition_variable和std::atomic等。...总的来说,确保线程安全性和处理线程之间的同步和通信需要综合考虑多种技术和技巧,根据具体的需求和情况选择合适的方法。
其实它们之间并无太大关联,只是Service可以放在其他进程中,Service是进程中的,Thread也是进程中的,Service中耗时操作又可以在通过Thread执行。...Service中的IBinder可以帮助我们与其他进程进行通信。...当Activity被销毁,就无法获取在被销毁的Activity中创建的子线程实例了。...例如,Activity创建了一个子线程在后台运行,执行完之后,返回数据时,创建它的Activity已被销毁,这是线程不安全的。...再例如,Activity1创建了一个子线程,Activity2是无法对Activity1创建的子线程进行操作。
Binder缓存用于该进程所有正在进行中的Binder事务 进程弃用binder机制会映射一块内存,大小是1M 跨进程通信申请的缓冲区大小是不能超过1M的 所有binder事务共享这1M内存空间,应该尽量避免同时跑多个事务...,同一线程获取同一实例 图125 [125.png] 进程间: 进程间的内存是相互隔离的,如何保证在进程间的单例呢,这个时候就需要一个中间人,所谓的中间人,就是他可以和所有进程进行通信,由其确保这个对象是单例的...,让IPC调用像在一个进程中一样简单,使开发者不必过分关注跨进程通信的事,将重点放在业务上 请求的转发:请求由应用端发起,通过binder驱动转发给目标进程去处理,目标进程处理完毕之后,会把返回结果通过...,并开启循环等待socket请求,孵化应用进程 图129 [129.png] Intent解耦,模糊进程边界,把调用者和组件之间进行解耦 应用只需要表达自己的意图,由AMS选择处理意图的组件 调用者和组件之间可能是同一进程的...View树相关 如何在Activity的onCreate和onResume获取view宽高?
服务可由其他应用组件启动(如 Activity ),服务一旦被启动将在后台一直运行,即使启动服务的组件( Activity )已销毁也不受影响。...而 service 大家记住,它是安卓中的一种特殊机制,service 是运行在主线程当中的,所以说它不能做耗时操作,它是由系统进程托管,其实 service 也是一种轻量级的 IPC 通信,因为 activity...可以和 service 绑定,可以和 service 进行数据通信。...而且有一种情况,activity 和 service 是处于不同的进程当中,所以说它们之间的数据通信,要通过 IPC 进程间通信的机制来进行操作。...Activity 和 Service 之间可以通过 Intent 传递数据,因此可以把 Intent 看作是通信使者。
image.png 今天分享的面试题,基本都是针对一线互联网公司的面试题整理的,我这里就不单独以公司为单位整理,我自己进行了分类,循序渐进,由基础到深入,由易到简。...WebView 12.进程保活 13.其他相关面试题 1.四大组件 四大组件是什么 四大组件的生命周期 Activity之间的通信方式 横竖屏切换的时候,Activity 各种情况下的生命周期 Activity...Activity的四种启动模式对比以及使用场景 Activity状态保存与恢复 Activity 怎么和Service 绑定 Service和Activity怎么进行数据交互?...的区别 Volley,okhttp,retrofit之间的区别和核心原理和使用场景 描述一下https https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?...描述一下进程回收的过程 如何降低进程的oom_adj 其他 Handler机制和底层实现 Handler、Thread和HandlerThread的差别 handler发消息给子线程,looper怎么启动
补充知识: Zygote zygote名字翻译叫受精卵,zygote进程的创建是由Linux系统中init进程创建的,Android中所有的进程都是直接或者间接的由init进程fork出来的,Zygote...进程负责其他进程的创建和启动,比如创建SystemServer进程。...那我们常说的主线程是什么?主线程就是承载ActivityThread的Zygote fork而创建的进程。...创建内部类 H,H继承于Handler 用于跨进程通信切换线程 创建ApplicationThread跨进程Binder对象mAppThread。...如果栈中不存在该实例,将会创建新的实例放入栈中。使用场景如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。
是一个守护进程,它维护着系统服务和客户端的binder通信; Zygoto进程:Zygoto进程是所有Java进程的父进程,我们的APP都是由Zygoto进程fork出来的; socket:一种独立于协议用于两个应用程序之间的数据传输的网络编程接口...,窗口的启动、添加、删除、大小、层级都是由WMS管理;(下面会解释什么是窗口) Launcher:Launcher就是系统桌面,主要用来启动应用桌面,同时管理快捷方式和其他组件,本质上也是一个应用程序...之间的交互。...来进行具体的操作; ActivityStack:Activity在AMS的栈管理,用来记录已经启动的Activity的先后关系,状态信息等。...的状态以及其他的管理信息。
难以与Activity通信:由于Service与Activity运行在不同的线程中,直接在Activity中操作Service存在线程安全问题。...为了在Activity与Service之间进行通信,通常需要使用Messenger、BroadcastReceiver、回调接口等方式来传递数据和消息。...开发复杂度高:相比于其他组件如Activity或Fragment,开发一个Service可能需要更多的代码和逻辑。开发者需要处理线程管理、并发操作、数据交互等复杂情况,增加了开发的难度。...Service可以通过调用startService()方法或绑定到其他组件(如Activity)来启动。...如果需要与Activity进行通信,可以使用不同的方式,如Binder、BroadcastReceiver、回调接口等。
消息队列由主线程(UI线程)处理,确保所有UI操作按顺序执行。这有助于避免因多线程操作导致的UI渲染问题和性能问题。...这涉及到调用Activity的构造函数、onCreate()方法和onStart()方法等生命周期回调。在这些回调方法中,开发者可以对Activity进行初始化操作,如设置布局文件、初始化视图等。...这使得应用可以接收到系统或其他应用发送的广播,响应各种系统事件或应用间的通信。...3.4.1 Binder机制的主要特点和组成部分 基于对象的通信:与其他IPC方式(如管道、消息队列、共享内存等)不同,Binder机制采用基于对象的通信模式。...这意味着客户端和服务端可以通过引用和调用远程对象的方法来进行通信,就像在本地进程中操作对象一样。 代理模式:Binder机制使用代理模式来实现跨进程通信。
// Activity 之间通过 Intent 进行通信;直接通过 Bundle 对象来传递 一个 Activity 通常就是一个单独的屏幕(窗口) Activity 之间通过 Intent 进行通信...(含:应用内/不同应用之间) 用于多线程通信 与 android 系统的通信 广播接收者的创建 构建 Intent,使用 sendBroadcast 方法发出广播。...(Intent, String permission)方法发送的广播,各广播接收者在接收广播时,会存在一定的先后顺序,即某接收者会先收到广播,其他接收者后收到广播,广播会在各接收者之间按照一定的先后顺序进行传递...viewRootImpl对象是在Activity中的onResume方法执行完成之后,View变得可见时才创建的,之前的操作是没有进行线程检查的,所以没有报错。...在 ViewRootImpl 创建完成之后,保证「创建 ViewRootImpl 的操作」和「执行修改 UI 的操作」在同一个线程即可。
原因就是,其实Dialog是Activity的一个组件,此时Activity并不是不可见,而是被Dialog组件覆盖了其他的组件,此时我们无法对其他组件进行操作而已。...主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息。简化了应用程序内各组件间、组件与后台线程间的通信。...service和其他组件之间的连接都表示为一个ServiceConnection,要想将service和其他组件进行绑定,就需要实现一个新的ServiceConnection。...当一个Service被终止时,Service的onDestroy()方法将会被调用,在这里应当做一些清除工作,如停止在Service中创建并运行的线程等。...网络协议: 协议:【协议指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则】 HTTP协议 基本概念:【超文本传输协议】允许将HTML(超文本标记语言)文档从Web服务器传送到客户端的浏览器
Application的生命周期 Application和Activity,Service一样,是Android框架的一个系统组件,当Android程序启动时系统会创建一Application 对象...Android Service、IntentService,Service和组件间通信 Service是一个在后台执行长时间运行操作而不用提供用户界面的应用组件,可由其他组件启动,即使用户切换到其他应用程序...Service和组件通信:比较方便的是用广播去处理。或者用绑定式的Service,与Activity关联,可以直接调用Service的方法。 6....Android消息机制 在Android中线程内部或线程之间进行信息交互时进场会使用消息。...由最顶层Activity的ViewGroup循环子View分发Down事件,如果子View中包含ViewGroup,则循环ViewGroup的子View同样分发Down事件。
主线程拿到Activity2的信息后,调用Instrumentation类的newActivity方法,其内通过ClassLoader创建Activity2实例。...为什么不用HashMap呢 Bundle内部是由ArrayMap实现的,ArrayMap的内部实现是两个数组,一个int数组是存储对象数据对应下标,一个对象数组保存key和value,内部使用二分法对key...因为使用Bundle的场景大多数为小数据量,我没见过在两个Activity之间传递10个以上数据的场景,所以相比之下,在这种情况下使用ArrayMap保存数据,在操作速度和内存占用上都具有优势,因此使用...而在Android平台中,更推荐使用Parcelable实现序列化,虽然写法复杂,但是开销更小,所以为了更加快速的进行数据的序列化和反序列化,系统封装了Bundle类,方便我们进行数据的传输 19.Activity...intent传递数据有限制,实质上是由Binder内核传递,并不是为了传输大量数据而设计,而是为了进程间频繁通信所设计,内核限制是4M,在APP中限制了不到1M(比1M略小的值),真机中可能还有其他任务在占用
Activity创建Fragment的方式 静态创建 动态创建 3、FragmentPageAdapter和FragmentPageStateAdapter的区别 FragmentPageAdapter...,通过发送Intent来传送我们的数据 2、Broadcast Receiver的使用场景 同一App具有多个进程的不同组件之间的消息通信 不同App之间的组件之间的消息通信 3、Broadcast Receiver...方法,远程攻击者可通过使用Java反射机制利用该漏洞执行任意Java对象的方法 2、WebView销毁步骤 WebView在其他容器上时(如:LinearLayout),当销毁Activity时,需要在...的,Activity的生命周期和WebView启动的线程的生命周期是不一致的,这会导致WebView一直持有对这个Activity的引用而无法释放,解决方案如下 独立进程,简单暴力,不过可能涉及到进程间通信...,如:new出来的对象和数组,在不使用的时候由Java回收器自动回收 3、Android解决内存泄漏的例子 单例造成的内存泄漏:在单例中,使用context.getApplicationContext(
如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?...当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity,onSaveInstanceState() 会被调用。...活动传递给Fragment:为了方便碎片和活动之间进行通信, FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例,前提是自己在布局文件中定义...当绑定服务的时候会返回一个binder对象,然后通过他进行多进程间的通信。 其实进程间通信就是为了实现数据共享。一个程序不同组件在不同进程也叫多进程,和俩个应用没有本质区别。...需要在服务里创建服务端 ContentProvider(进程间数据共享)和message一样,底层也是binder,除了oncreate方法其他方法(crud)都是运行在bindler线程里。
领取专属 10元无门槛券
手把手带您无忧上云