安卓小结《1》

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完成~

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

时间: 2024-08-01 10:46:23

安卓小结《1》的相关文章

H5嵌入原生开发小结----兼容安卓与ios的填坑之路

一开始听说开发H5,以为就是做适配现代浏览器的移动网页,心想不用管IE了,欧也.到今天,发现当初too young too simple,兼容IE和兼容安卓与IOS,后者让你更抓狂.接下来数一下踩过的坑.主要分UI展示,键盘,输入框等等.解决bug最苦恼的问题不是没有解决方案,而是你没有找到真正的原因.再就是现象难以重现,每次都要发布代码,然后到手机app中去测试,模拟.这些地方会耗费大量的精力. 一.UI相关 1.安卓4.4以下不支持fixed布局. fixed布局的作用之一就是在手机键盘弹起

安卓第一次小结

文本框: 存放文本的 <TextView android:id="@+id/textView1" //控件的身份 android:layout_width="wrap_content" android:layout_height="wrap_content" //wrap_content 适应内容 // match_parent 填充容器 //fill_parent  跟match_parent 一样的 //直接使用整数    单位 dp

安卓 okhttp小结

概念及原理 特性 支持同步阻塞调用和具有回调的异步调用. OkHttp支持Android 2.3及以上版本. 对于JDK,最低要求是1.7. Request是OkHttp中访问的请求,Builder是辅助类.Response即OkHttp中的响应. 代码部分 项目中使用EventBus: S1.添加jar包或依赖 compile 'com.squareup.okhttp3:okhttp:3.8.0' compile 'com.squareup.okio:okio:1.13.0' S2.创建POS

安卓 开发笔记目录

安卓 开发笔记index 安卓基础 Fragment总结 安卓 BroadcastReceiver笔记 安卓 Notification-通知总结 开源框架笔记 安卓 okhttp小结 EventBus框架总结 安卓 图片加载框架ImageLoader 第三方SDK 安卓 短信验证MobSMS集成 开源项目 其他 安卓 常用属性设置代码笔记 安卓 代码混淆与打包 AOSP开发笔记 开发工具 SecureCRT连接Ubuntu配置 Ubuntu开发环境搭建 开发环境 AOSP android7.1.

安卓动态调试七种武器之长生剑 - Smali Instrumentation

安卓动态调试七种武器之长生剑 - Smali Instrumentation 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中(共7篇)分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 0x01 长生剑 长生剑是把神奇的剑,为白玉京所配,剑名取

项目小结一:在项目中使用 IScroll 所碰到的那些坑

最近做了个 WEB APP 项目,用到了大名鼎鼎的 IScroll,滚动的效果的确很赞,但是坑也是特别多,下面总结一下,希望自后来者有帮助. 该项目现已开源在 github 上,https://github.com/ansiboy/ChiTuStore 一. 使用 abstract 定位 顶栏和底栏最好不要使用 fixed 定位,应该使用 abstract 定位.我最初使用的是 fixed 定位,页面从右往左呈现的时候,经常会出现两个问题:1.顶栏时不时地会消失掉,2.新页面在移动的过程中,顶栏

安卓APP加载HTML5页面解决方案总结

由于H5页面在移动端的兼容性及扩展性方面体现出来的优势,又兼得APP中植入H5页面对应用的灵活性有大大的提升(如活动.游戏的更新等),APP开发不可避免的需要加载一些H5页面,但安卓客户端对网页内容的排版.整理.交互等可能会出现一些不可预料的问题.本文将对安卓端加载网页写一些比较通用,可能避免问题的统一的解决方法总结. 背景 一般对前端知识有所了解的都清楚,解析网页主要是靠页面渲染引擎和JS解析引擎,前者负责取得网页的内容(HTML.XML.图象等等).整理信息(例如加入CSS等),以及计算网页

【Cordova】Cordova安卓开发入门

引言 微软开启新战略--移动为先,云为先.作为开发者,首先感受到的变化就是VS2015预览版增加了对各种跨平台框架的支持,极大方便了我们的开发.其中号称原生性能的Xamarin要收费,挺贵的,一般人还真玩不起来.话说什么时候微软把Xamarin收购然后直接免费,那简直画面太美了不敢看.不过可能性极小就是了,毕竟Win10才是微软的宝贝.还好,我们还有Cordova可以玩的,只要你懂Html和JS都可以开发APP了.下面,我就简单说说. Cordova 命令行 在VS2015之前,做Cordova

10天学安卓-第三天

原文:10天学安卓-第三天 经过第二天的学习,我们正确的调用了百度天气API,将天气信息显示到了界面上,做到这一步,我们的工作就算是完成1%了,剩下99%的工作就需要不断的润色这个未成形的APP了. 最首要的就是,我们要把那么一大堆字符转换为普通用户可以轻松理解的界面,那么我们来学习一下Android里面的界面布局. 打开res/layout/activity_main.xml文件,切换到Layouts选项卡,可以看到里面有许多项目,GridLayout.LinearLayout.Relativ