安卓小结《1》

简介: Activity的生命周期和启动模式的知识点小结:  1.如果Activity切换的时候,新Activity是透明,旧的不会走onStop方法。  2.新的Activity切换的时候,旧Activity  会先执行,onpause,然后才会启动新的activity.  3. Activity在异常情况下被回收时,onSaveInstanceState方法会被回调,回调时机是在onStop之前,当Activity被重新创建的时 候,onRestoreInstanceState方法会被回调,时序在onStart之后;在横竖屏切换的时候保持Activity的状态。

Activity的生命周期和启动模式的知识点小结:

 1.如果Activity切换的时候,新Activity是透明,旧的不会走onStop方法。

 2.新的Activity切换的时候,旧Activity  会先执行,onpause,然后才会启动新的activity.

 3. Activity在异常情况下被回收时,onSaveInstanceState方法会被回调,回调时机是在onStop之前,当Activity被重新创建的时 候,onRestoreInstanceState方法会被回调,时序在onStart之后;在横竖屏切换的时候保持Activity的状态。

 4. Activity的LaunchMode

a. standard 系统默认。每次启动会重新创建新的实例,谁启动了这个Activity,这个Activity就在谁的栈里。

b. singleTop 栈顶复用模式。该Activity的onNewIntent方法会被回调,onCreate和onStart并不会被调用。

c. singleTask 栈内复用模式。只要该Activity在一个栈中存在,都不会重新创建,onNewIntent会被回调。如果不存在,系统会先寻找是否存在需要的栈,如果不存在该栈,就创建一个任务栈,然后把这个Activity放进去;如果存在,就会创建到已经存在的这个栈中。

d. singleInstance。具有此种模式的Activity只能单独存在于一个任务栈。

5. 标识Activity任务栈名称的属性:TaskAffinity,默认为应用包名。

6. IntentFilter匹配规则。

a. action匹配规则:要求intent中的action 存在 且 必须和过滤规则中的其中一个相同 区分大小写;

b. category匹配规则:系统会默认加上一个android.intent.category.DEAFAULT,所以intent中可以不存在category,但如果存在就必须匹配其中一个;

c. data匹配规则:data由两部分组成,mimeType和URI,要求和action相似。如果没有指定URI,URI但默认值为content和file(schema)

================================================================

IPC机制:

1.

使用android:process会带来的问题:

静态成员和单例模式完全失效;

SharedPreferences可靠性下降;

Application会多次创建;

2.

Android中的IPC方式

a. Bundle

b. 文件共享(不建议使用系统的SharedPreferences)

c. Messenger(轻量级IPC,底层依然是AIDL)工作原理

d. AIDL  

aa. AIDL支持的数据类型:基本数据类型;String和CharSequence;List只支持ArrayList,里面每个元素都必须被AIDL支持;Map只支持HashMap,里面每个元素都必须被AIDL支持(包括key和value);Parcelable;AIDL接口本身;  

bb. 服务端可以使用CopyOnWriteArrayList和ConcurrentHashMap来进行自动线程同步,客户端拿到的依然是ArrayList和HashMap;  

cc. 服务端和客户端之间做监听器,服务端需要使用RemoteCallbackList,否则客户端的监听器无法收到通知(因为服务端实质还是一份新的序列化后的监听器实例,并不是客户端那份);  

dd. 客户端调用远程服务方法时,因为远程方法运行在服务端的binder线程池中,同时客户端线程会被挂起,所以如果该方法过于耗时,而客户端又是UI线程,会导致ANR,所以当确认该远程方法是耗时操作时,应避免客户端在UI线程中调用该方法。同理,当服务器调用客户端的listener方法时,该方法也运行在客户端的binder线程池中,所以如果该方法也是耗时操作,请确认运行在服务端的非UI线程中。另外,因为客户端的回调listener运行在binder线程池中,所以更新UI需要用到handler。

ee. 客户端通过IBinder.DeathRecipient来监听Binder死亡,也可以在onServiceDisconnected中监听并重连服务端。区别在于前者是在binder线程池中,访问UI需要用Handler,后者则是UI线程。  

ff. 可通过自定义权限在onBind或者onTransact中进行权限验证。

e. ContentProvider(有的手机上会出现不加uses-permission依然可以访问BookProvider的问题,已和主席确认)

f. Socket 一般用于网络通信,AIDL用这种方式会过于繁琐,不建议。  

4. Binder连接池,通过BinderPool的方式将Binder的控制与Service本身解耦,同时只需要维护一份Service即可。这里用到了CountDownLatch,大概解释下用意:线程在await后等待,直到CountDownLatch的计数为0,BinderPool里使用它的目的是为了保证Activity获取BinderPool的时候Service已确定bind完成~

============================================================

 

 

目录
相关文章
|
23天前
|
人工智能 vr&ar Android开发
深入探索安卓与iOS的未来发展
【10月更文挑战第8天】 本文将深入探讨安卓和iOS两个主流操作系统的未来发展,从技术创新、用户体验和市场竞争等多个角度进行分析,揭示它们在技术演进中的趋势以及面临的挑战。
46 3
|
19天前
|
安全 Android开发 iOS开发
探索安卓与iOS的未来发展
【10月更文挑战第12天】 随着科技的飞速发展,移动操作系统已经成为人们日常生活中不可或缺的一部分。本文将探讨安卓和iOS系统的未来发展,分析它们在技术创新、用户体验和生态系统建设方面的潜力,并展望未来可能的趋势。通过比较两者的优势和挑战,我们希望为读者提供一个全面而深入的视角,帮助他们更好地了解这两个主流移动操作系统的未来走向。
30 0
|
3月前
|
安全 Android开发 iOS开发
安卓与iOS的较量:哪个更适合你?
在智能手机的世界里,安卓和iOS是两个主要的操作系统。它们各自有着不同的优点和缺点,那么哪一个更适合你呢?本文将从用户界面、应用程序、安全性等方面进行比较,帮助你做出决定。
|
3月前
|
IDE 开发工具 Android开发
安卓与iOS开发之比较:选择适合你的平台
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据半壁江山。本文将深入浅出地探讨这两个平台的开发环境、工具、语言和市场差异,帮助开发者根据自己的需求和偏好做出明智的选择。无论你是编程新手还是资深开发者,了解这些平台的核心差异将助你一臂之力,让你的技术之路更加顺畅。
34 2
|
3月前
|
搜索推荐 安全 Android开发
安卓与iOS的较量:哪个系统更适合你?
在智能手机市场中,安卓和iOS两大操作系统一直占据主导地位。本文将从多个方面对这两个系统进行比较,以帮助读者更好地了解它们之间的区别和优劣。我们将重点关注它们的用户界面、性能、安全性、应用生态等方面。无论您是安卓粉丝还是iOS忠实拥趸,这篇文章都将为您提供有价值的信息。让我们一起探索这两个系统的世界吧!
|
6月前
|
搜索推荐 安全 Android开发
安卓与iOS系统的用户体验比较
【2月更文挑战第11天】 在当今移动设备市场上,安卓和iOS系统一直是两大主流操作系统。本文将从用户界面设计、应用生态、系统定制性等方面对安卓和iOS系统进行比较分析,旨在探讨两者的优势和劣势,为用户选择合适的操作系统提供参考。
|
6月前
|
存储 SQL 数据库
安卓移动应用开发(安卓系统开发教程)
安卓移动应用开发(安卓系统开发教程)
|
12月前
|
Android开发
安卓获取版本号
安卓获取版本号
51 0
|
Android开发
|
数据管理 API Android开发