1.compileDebugKotlin FAILEDåaidl
2.Android进程间通信之bindService篇
3.Activityçåºç¡ç¥è¯(ä¸)
4.腾讯T9级大神也在学的源码《Android Framework精编内核手册》(附Framework面试题)
compileDebugKotlin FAILEDåaidl
èªä»å ¥èCSï¼é¡¹ç®ç¼è¯ä¸ç´æ个ç¥åæ¥éï¼æ¯æ¬¡é½éè¦clean rebuildè¥å¹²æ¬¡, é常è½è¯¯æ¶é´ç®åçè¯´ï¼ å¦æå¨ä½¿ç¨AIDLæ¶éè¦ä¸ä¸ªèªå®ä¹çæ°æ®ç±»åï¼ æ们ä¸è¬ä¼è¿ä¹åï¼
å½æ们åä¸ä¸ªåç±»SubClass继æ¿è¯¥ç±».ç¶åå¨Kotlinæ件ä¸ç´æ¥æè é´æ¥å¼ç¨å°SubClassæ¶, å°±ä¼åºç°ä¸ä¸ªä»¥ä¸çæ¥é
æ¥éåçå¨ app:compileDebugKotlin , ä¹å°±æ¯kotlinc. ä½æ¯æ们ææå·²ç»å®ä¹äºè¯¥ç±». å ¨å±æç´¢åç°æ两个 CustomParcel.java, æ¨æµæ¯ä¸¤ä¸ªååçæ件å¼èµ·.
é¤äºæ们èªå·±åçJavaæ件, å¦å¤ä¸ä¸ªè¯å®æ¯aidlçæç. å¼ç¨ä¸å¼ å¾:
å¨ç¼è¯å¼å§æ¶ä¼æaidl转å为Javaæ件, æ¥ä¸æ¥æä¼ç»è¿javac, kotlincæJVMè¯è¨æ件转å为åèç .class æ件.
æ¥çaidlçæçæ件, åç°æ¯ç©ºç, 并ä¸æä¸è¡æ³¨é: 说æè¿æ¯ä¸ä¸ª PlaceHolder, ä¹å°±æ¯å ä½æ件.
ç½ä¸æå°æ人éå°äº ç¸åçé®é¢ ï¼é®é¢ç¡®å®åçå¨kotlinCç¼è¯å¨ä»¥aidlçæç空javaæ件为ç¼è¯ç®æ ï¼ èä¸æ¯çæ£çjavaç±»æ件. 并ä¸ä¹ç»åºäºè§£å³åæ³ï¼å级buildToolsçæ¬.
æ¥ç buildToolsæ交记å½
æ交记å½: No java output for parcelable declaration. ä¹å°±æ¯ç§»é¤äºä»¥ä¸ç为èªå®ä¹çaidl Parcelableç±»çæJavaæ件ç设å®(.0.2ä¹åçå®ç°)
å级.0.3, å次ç¼è¯, åç°build/aidlç®å½ä¸ä¸åçæååç PlaceHolderæ件äº, åªå©ä¸å¯ä¸çæ们èªå·±çæ件, kotlinCè¿æ¬¡åªè½ç¨å¯ä¸çæ件æ¥ç¼è¯ï¼æ¥é解å³.
è³äºä¸ºä»ä¹ææ¶åclean rebuildè½ç¼è¯æåï¼éè¦æ¢ç©¶ä¸kotlinCçæºç .
æåçæ¯ï¼ .0.2å°±æ¯ gradle plugin4.1é»è®¤æ¯æççæ¬ ï¼ æä»¥ä½ ä¸æå¨æå®buildToolsçæ¬ä¸º.0.3以ä¸å°±ä¼æè¿åé.
Android进程间通信之bindService篇
在Android的进程间通信中,binder是解析一种核心机制,广泛应用于四大组件之一的源码Service。本文专注于使用Service与binder结合的解析bindservice通信方式,探讨其实现方法与关键特性。源码
创建Service作为服务端,解析egret native 源码其主要功能是源码向客户端提供接口。创建Service的解析方式包括扩展binder类、使用Messenger和AIDL。源码扩展binder类适用于服务端与客户端在同进程场景,解析不具备跨进程能力,源码因此这里不详细说明。解析使用Messenger能实现跨进程通信,源码特点是解析请求放入队列,服务端无需线程安全设计,源码但在实际项目中使用较少。
AIDL(Android Interface Definition Language)是一种便捷实现跨进程通信的工具。它支持客户端并发访问,要求服务端实现线程安全设计。创建.aidl文件定义接口,服务端和客户端均需包含源码。晴天cms源码实现AIDL接口的实例在onBind()接口返回给客户端,使得客户端能调用接口。
使用AIDL的关键技术点在于通过IPC调用传递对象。支持Java语言原语类型、String、CharSequence、List和Map等数据类型传递。对于自定义对象,必须实现Parcelable接口,以完成序列化。emv指标源码在Android 及以上版本中,可直接定义Parcelable对象。AIDL工具在编译时协助生成序列化代码。
在方法中使用Bundle参数时,需在解析前显式设置ClassLoader。这样能确保Bundle中对象正确加载。
本文总结了使用binder和bindservice实现Java端与Java端跨进程通信的方式,并简单概述了AIDL工具的关键技术点。使用bindservice结合AIDL,能在多个场景下有效实现Java应用之间的java date 源码高效通信。
Activityçåºç¡ç¥è¯(ä¸)
ä¸ç¯æ»ç»äºActivityçä¸äºç¥è¯,ç°å¨ç»§ç»å¯¹Activityçç¥è¯è¿è¡æ¢³ç,å æ¬Activityç´æ¥ä¼ éæ°æ®,Activityççå½å¨æ,Activityçå¯å¨æ¨¡å¼ç.
1.intentä¼ éæ°æ®:
使ç¨startActivityæ¹æ³,intentçputExtra()æ¹æ³,以é®å¼å¯¹çå½¢å¼ä¼ éæ°æ®,该æ¹æ³æå¾å¤éè½½æ¹æ³,å¯ä»¥æ ¹æ®ä¼ éæ°æ®çä¸åç±»åéæ©åéçæ¹æ³.é¤äºæputExtra()æ¹æ³å¤,è¿æputExtras()æ¹æ³,ä¼ éçåæ°æ¯Bundle.
å¦æä¼ éçæ¯å¯¹è±¡,è¿ä¸ªå¯¹è±¡è¦å®ç°åºåå,ä¹å°±æ¯å®ç°Parcelableæè Serializableæ¥å£.
å¦æå¸æ被å¯å¨ç页é¢è¿åæ°æ®,éè¦ä½¿ç¨startActivityForResult()æ¹æ³,è¿ä¸ªæ¹æ³ä¸éè¦è®¾ç½®è®¿é®å·,ç¨æ¥åºåä¸åç访é®è .并ä¸å¨å¯å¨é¡µéåonActivityResultæ¹æ³ç¨æ¥æ¥æ¶è¿åçæ°æ®,
2.两ç§æ åµä¸çActivityççå½å¨æ.
æ£å¸¸æ åµä¸ççå½å¨æ,æ£å¸¸æ åµæ¯æç¨æ·çæ£å¸¸æä½ä¸çActivityççå½å¨æ.åé¢ä¼åæå¼å¸¸æ åµä¸ççå½å¨æ.
onCreate: Activity第ä¸æ¬¡å建æ¶åçåè°,主è¦æ¯å¨è¿ä¸ªæ¹æ³è¿è¡åå§åå·¥ä½,æ¯å¦åå§åæ§ä»¶åäºä»¶ç»å®å·¥ä½.
onStart:Activityä»ä¸å¯è§ç¶æåæå¯è§ç¶æ.
onResume:Activityåæåå°,å¯ä»¥åç¨æ·äº¤äº.
onPause:Activityå¯è§ä½æ¯ä¸è½åç¨æ·äº¤äº.
onStop:Activityä»å¯è§åå¾ä¸å¯è§,æ为åå°Activity.
onDestroy:Activityéæ¯æ¶è°ç¨.
onRestart:Activityä»åå°åæåå°Activity.
å¨å¯å¨Activityå两个Activityä¹é´è·³è½¬æ¶,å¯ä»¥ç¥éActivityççå½å¨æååè¿ç¨,æ两个说æ:(1)å¨ä¸¤ä¸ªActivity跳转æ¶,第ä¸ä¸ªActivtyçonPause,onStopæ¹æ³å第äºä¸ªActivityççå½å¨ææ¹æ³è°ç¨æ¶æº.
第ä¸ä¸ªActivityå æ§è¡onPauseæ¹æ³,第äºä¸ªActivityæè½å建.è¿ä¹å°±æå³çå¨onPauseæ¹æ³ä¸ä¸è½æ§è¡å¤ªèæ¶çæä½,å¦åä¼å½±å第äºä¸ªActivityçå建.å¨æºç (ActivityStack)ä¸æè¿æ ·ç注é:
(2)onStartåonResume,onPauseåonStopè¿ä¸¤å¯¹æ¹æ³çå®è´¨ä¸åå¤:onStartåonStopè¿ä¸¤ä¸ªæ¹æ³æ¯ä»Activityçå¯è§æ§æ¥åºåç,onResumeåonPauseæ¯ä»Activityæ¯å¦å¤äºåå°,æ¯å¦å¯ä»¥åç¨æ·äº¤äºæ¥åºåç,注æå¨onPauseè°ç¨æ¶Activityè¿æ¯å¯è§ç,è°ç¨æ¶æºæ¯å¦å¼¹åºdialogæ¶,ä¸é¢çActivityæ¯å¯è§ç.è¿ä¸ªæ¶åè°ç¨çæ¯onPauseæ¹æ³.
å¼å¸¸æ åµä¸Activityççå½å¨æ:å¼å¸¸æ åµä¸æ¯æèµæºç¸å ³é ç½®åçååæåå°Activity被系ç»åæ¶æ¶Activityççå½å¨æ.åå°Activity被系ç»åæ¶çæ åµæ¯è¾é¾å¤ç°,å¨èµæºç¸å ³é ç½®åçååæ¶ååå°Activity被åæ¶æ¶ççå½å¨ææ§è¡è¿ç¨æ¯ä¸æ ·ç,æ¯è¾å®¹æå¤ç°çå°±æ¯æ¨ªç«å±åæ¢æ¶ççå½å¨ææ§è¡è¿ç¨.å¨ AndroidManifestçActivityç»ä»¶ä¸é ç½®android:screenOrientationæ ç¾,å½è®¾ç½®å¯ä»¥æ¨ªç«æ¹åéçæ¹åæåºå¨æ¥è°èæ¶,å¨åæ¢æ¶ä¼åºç°å éæ¯Activityåå建çè¿ç¨.
è¿ç¨:
å¨è¿ç§æ åµä¸æå¯è½ä¼ææ°æ®ç丢失,ç³»ç»æä¾ç¨æ¥ä¿åæ°æ®åè¿åæ°æ®çæ¹æ³:onSaveInstanceStateåonRestoreInstanceState.ç¨æ¹æ³åæ°Bundleå¯ä»¥ä¿ååè¿åæ°æ®.
å¯ä»¥æ ¹æ®éè¦è®¾ç½®android:screenOrientationæ ç¾,设å®activityçæ¹å,å¦æactivityçæ¹åæ¯éè¦æ¨ªç«å±åæ¢,ä½æ¯ä¸å®¹è®¸éæ¯Activity,å¯ä»¥è®¾ç½®å¦ä¸æ ç¾,å½è¿äºæ åµ(常ç¨ç)åçååæ¯ä¸ä¼éæ°èµ°Activityççå½å¨ææ¹æ³,åªä¼è°ç¨onConfigurationChanged,å¯ä»¥æ ¹æ®æ åµå¨è¿ä¸ªæ¹æ³éæ´æ°æä½.
åæ¢æ¶çlogè¾åº
3.Activityçåç§å¯å¨æ¨¡å¼
æ å:æ¯Activityçé»è®¤å¯å¨æ¨¡å¼,对äºAndroidManifestçActivityèç¹ä¸çandroid:launchMode="standard"æ ç¾.
ç¹å®:æ¯æ¬¡å¯å¨é½ä¼éæ°å建æ°çActivity.
singleTop:对åºçAndroidManifesçActivityèç¹ä¸çandroid:launchMode="singleTop"æ ç¾
ç¹ç¹:å½æ¤æ¨¡å¼çActivityå¤äºæ 顶æ¶,ä¸ä¼éæ°å建æ°çActivity,ä¼è°ç¨onNewIntentæ¹æ³,å¦ææ´æ°Activityçintent,éè¦è°ç¨ setIntent()æ¹æ³,å ·ä½ççå½å¨æè¿ç¨
singleTask:å¨activityæ ä¸å·²ç»æéè¦åå¯å¨çactivityæ¶,ä¼å æ¸ é¤ä½äºéè¦å¯å¨activityä¹ä¸çactivity,ä¾å¦:å¯å¨é¡ºåºmainActivity-activityA -activityB-activityA,å ¶ä¸activityAæ¯singleTaskçå¯å¨æ¨¡å¼:
singleInstance:å¨ä¸ä¸ªæ ä¸åç¬åå¨çactivity.
å ³äºactivityæ :æ¯æç¨æ¥ç®¡çactivityä¸ç§"å è¿å åº"çéåç»æ,æ¥çactivity对åºæ çæ¹æ³:ActivityçgetTaskId()æ¹æ³,åä¸ä¸ªæ çidå¼æ¯ç¸åç.adb shell dumpsys activityå¨ç»ç«¯æ¥çæ ç»æ,æ¯å¦è¿æ¯ä¸é¢çactivityå¯å¨é¡ºåº,ä¸åæ¯ActivityAè¿æ¯è®¾ç½®æsingleInstance,è¿æ¯çæ ç»æ:æ两个TaskRecord,å ¶ä¸ActivityBåMainActivityä½äºåä¸ä¸ªæ ä¸.
4.Activityå¼åä¸ä½¿ç¨æå·§:
<1>å®ä¹ä¸ä¸ªç¶Activity,å¨å建æ°çActivityæ¶ç»§æ¿è¿ä¸ªactivityå³å¯,å°ä¸äºactivityçå ¬å ±è®¾ç½®å¯ä»¥è®¾ç½®å¨ç¶activityä¸,æ¯å¦è·åæ¯ä¸ªActivityçåå,设置activityççªä½å±æ§,åä¸ç®¡çactivityççå½å¨æç,
<2>å¨å¯å¨çactivityä¸å®ä¹éææ¹æ³,å¯å¨æ¡ä»¶ä¼æ¾èæè§:
<3>管çactivityç±»,ç¨æ¥ä¸é®éåºapp.å¨ç¶ç±»Activityçå建åéæ¯æ¶ç¨æ¥æ·»å å移é¤Activity,å¨éè¦ä¸é®éåºçå°æ¹è°ç¨éæfinishAllActivityæ¹æ³.
腾讯T9级大神也在学的《Android Framework精编内核手册》(附Framework面试题)
Android开发者在Framework层维护开发时,通常会经历五个阶段。切记,不可因自满而停滞不前,避免陷入技术瓶颈。
如今,行业对开发者的要求日益提高,大厂面试中的问题技术难度普遍增加。看似基础的问题,通过网上查阅资料或许能解决,flask 项目源码但面试官会根据你的回答进行深入挖掘。若对技术原理和底层逻辑掌握不足,应对这类问题将有一定难度。
腾讯T9级大神分享的《Android Framework精编内核手册》是专为这一需求设计的学习资源。该手册不仅涵盖了底层原理、源码解析等核心技术点,还深入探讨了普通开发者难以触及的复杂系统问题设计方案。通过学习并整理此手册,开发者可显著提升自己的技能水平。
该手册包含以下章节:深入解析Binder、深入解析Handler消息机制、Dalvik VM进程系统、深入解析WMS、PackageMS启动、AMS面试专题。每章节都旨在提供全面、深入的框架知识,为开发者提供坚实的基础。
此外,《Android Framework高频面试题总结》也提供了帮助,其中包括了AMS、PMS、Activity启动流程、App启动流程、Binder机制(IPC、AIDL的使用)、为什么使用Parcelable、Android图像显示相关流程、Vsync信号等关键知识点。这份总结为开发者准备大厂面试提供了宝贵的资源。
尽管资料内容丰富,这里仅展示部分内容截图。有需要的伙伴可通过文末卡片获取完整资源。
掌握底层原理并能触类旁通是大厂所需的关键技能。通过学习这份资料,开发者将能够显著提升自己的Framework技能,加速成为高级Android开发者的过程。
最后,祝愿每位开发者都能在职业生涯中取得成功,实现个人目标。希望这份资料能为你的旅程提供宝贵的支持和帮助。