最近的一些基础笔记
来源:互联网 发布:淘客cms系统 编辑:程序博客网 时间:2024/05/16 18:53
很多细节时间久了就忘了
1、fragmentManager.popBackStack();最终执行的是FragmentTranaction.commit();如果执行时应用在后台,触发了onSaveInstanceState(),然后触发popBackStack(),则闪退。
因为不是commitIgnoreState...
2、使用sp作为字体大小单位,会随着系统的字体大小改变,而dp作为单位则不会.
3、android.os.BadParcelableException: ClassNotFoundException when unmarshalling:
putExtra时存入了null导致的。
Android有两种不同的classloaders:framework classloader和apk classloader,其中framework classloader知道怎么加载android classes,apk classloader知道怎么加载你的代码,即可以知道你自定义的类,apk classloader继承自framework classloader,所以也知道怎么加载android classes。在应用刚启动时,默认class loader是apk classloader,但在系统内存不足应用被系统回收会再次启动,这个默认class loader会变为framework classloader了,所以对于自己的类会报ClassNotFoundException。
如果是在要传递的JavaBean中有其中一个Field继承自Parcelable,那么有很简单的处理方法,只要把类似rect = in.readParcelable(null);改为config = in.readParcelable(Rect.class.getClassLoader());
但是我们这里是直接传递一个List,那要怎么办呢?
其实很简单,只需要在Client端读取Bundle中的数据之前加上如下一行代码:
bundle.setClassLoader(getClass().getClassLoader());这样就会使用apk classloader加载。
4、Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。
这个方法有两个参数:
1)packageName 包名,要得到Context的包名
2)flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。
限制:1)共享应用之间都需要配置相同的android:sharedUserId
<manifestandroid:sharedUserId="io.silvrr.installment"...
2)两个应用要有相同的签名
5、merge、和rebase的区别
merge是用来合并2个不同分支的,合并后会生成一个新的commit
Rebase是把当前修改内容复制一份到另一分支上,使两个分支一致,不会生成新的commit
6、关于onActivityResult和onResume调用顺序问题
系统会先调用onActivityResult再调用onResume,具体调用代码可以看ActivityThread第4096行
deliverResults(r, res.results);
if (resumed) {
r.activity.performResume();
r.activity.mTemporaryPause =false;
}
7、Activity OnCreate中 EventBus#register(Object)报错java.lang.NoClassDefFoundError: android/os/PersistableBundle
//Starting with EventBus 2.2 we enforced methods to be public (might change with annotations again)
Method[] methods = clazz.getDeclaredMethods();
Method[] methods = clazz.getMethods();
该bug修复方式,onCreate重写
protected voidonCreate(Bundle savedInstanceState) {}
不要重写
public voidonCreate(Bundle savedInstanceState, PersistableBundle persistentState) {}
原因:onCreate中EventBus注册时,会用反射去读取一些方法,但是PersistableBundle是API21才提供的,在低于4.4的系统找不到这个类,导致闪退
8、假设Handler绑定子线程,只有在sendMessage之后,handleMessage里才是在该handler绑定线程
9、startActivityForResult启动singleTask模式的activity,无回调的问题。
<p>Note that this method should only be used with Intent protocols
* that are defined to return a result. In other protocols (such as
* {@linkIntent#ACTION_MAIN} or {@linkIntent#ACTION_VIEW}), you may
* not get the result when you expect. For example, if the activity you
* are launching uses the singleTask launch mode,it will not run in your
* task and thus you will immediately receive a cancel result.
根据这一段源码的注释,可以知道启动的singleTask模式的Activity与其他模式activity运行不在一个task中,数据不交互,所以启动时会直接触发RESULT_CANCEL。
从柯元旦的《Android 内核剖析》的第十章“Ams内部原理“10.1.3中有这样的一段话:请注意:SINGLE_TASK标识以及SINGLE_INSTANCE两个标识必须在r.result==0的条件中,即这两个标识只能用在startActivity()的方法中,而不能使用在startActivityForResult方法中。因为从Task的角度看,Android认为不同Task之间的Activity是不能传递数据的,所以不能使用NEW_TASK标识,但还是要调用forResult方法。
官方文档:singleInstance与“singleTask"”相同,只是系统不会将任何其他 Activity 启动到包含实例的任务中。 该 Activity 始终是其任务唯一仅有的成员。
10、@JavascriptInterface 在4.4以下版本,这种h5与原生交互存在bug,4.4以上通过注解获取方法,h5只能拿到带有注解的方法进行操作。而4.4以下,是通过方法名获取,h5能拿到该类中所有方法,不够安全。
11、android studio中导入svg矢量图插件 http://www.cnblogs.com/tokyow/p/6293743.html
12、关于ScrollView嵌套RecyclerView,item不显示的问题:ScrollView中加上 android:fillViewport="true" 属性。
13、向现有项目中添加C/C++代码:https://developer.android.google.cn/studio/projects/add-native-code.html?hl=zh-cn#link-gradle
14、关于Parcelable,实现parcelable的对象,取出的值会存在部分字段数据丢失的问题,原因是write、read字段的顺序要一致。
15、关于序列化
- 最近的一些基础笔记
- 最近的一些笔记
- 最近的一些设计笔记
- 最近关于排序算法的 一些笔记
- 【学习笔记】最近对B树学习的一些笔记
- 最近做的一些比较基础的笔试面试题目
- 一些基础函数的笔记
- 最近的一些开发
- 最近的一些想法
- 最近的一些感触
- 最近的一些事情
- 最近的一些打算
- 最近的一些感触
- 最近的一些感想
- 最近的一些日子
- 最近的一些事情
- 最近的一些安排
- 最近的一些面试
- 1428:阵前第一功
- IDEA的使用
- SVN版本库备份和恢复
- Android 的MVVM模式的简单应用
- 时间戳与Date相互转换
- 最近的一些基础笔记
- Redis简介
- FreeRTOS_004_FreeRTOSConfig.h配置文件(一)_通用配置
- 网站系统架构梳理-解决高负载高并发
- mac hdmi 外接显示器没声音
- SQL获取年月日方法
- 兼容ie6 | SWFObject、Flash & json2以及动态JavaScript片段加载
- 【二叉树经典问题】94. Binary Tree Inorder Traversal
- HBase全网最佳学习资料汇总