Android小知识汇总
1.Android Studio 将module编译打包成aar文件,module依赖的
(例如
compile 'com.zhy:autolayout:1.4.3'
)不会被打包进入aar文件,应用引入该aar文件(无论是本地引入,还是网络库引入)时,都还需要在应用(app)module的依赖中填加aar module的依赖。否则应用运行时会crash。
因此,开发sdk库(jar或aar)时,尽可能不依赖第三方库
2.Android 线程、组件之间通信可以通过Handler消息处理器,BroadCast广播,Service服务,EventBus。
3.Activity生命周期注意,还可以包含以下三个函数
//Activity窗口获得或失去焦点时被调用,在onResume之后或onPause之后 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); Log.i(TAG, "onWindowFocusChanged called."); } /** * Activity被系统杀死时被调用. * 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死. * 另外,当跳转到其他Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态. * 在onPause之前被调用. */ @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt("param", param); Log.i(TAG, "onSaveInstanceState called. put param: " + param); super.onSaveInstanceState(outState); } /** * Activity被系统杀死后再重建时被调用. * 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity. * 这两种情况下onRestoreInstanceState都会被调用,在onStart之后. */ @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { param = savedInstanceState.getInt("param"); Log.i(TAG, "onRestoreInstanceState called. get param: " + param); super.onRestoreInstanceState(savedInstanceState); } }
4.getLong方法确定具有指定名称的系统属性的long值。不能用来将字符串转long型。可以用
Long.parseLong()或Long.valueOf()
语法1 public static Long getLong(String nm)
String str = "sun.arch.data.model";
System.out.println(Long.getLong(str));
// prints null
str = "lang";
System.out.println(Long.getLong(str));
打印结果:
64
null
5.java arraylist转数组
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("1");
arrayList.add("2");
// 正确转化方式
String[] strArrayTrue = arrayList.toArray(new String[0]);
6.Android 布局文件慎用Start和End 如marginEnd,layout_alignParentStart等
Start和End是Google从Android4.2开始,为了配合RTL(从右往左读)布局给布局添加的新属性。
所以,在4.2以下,Start与End属性是无效的。
7.onSaveInstanceState()方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等,而不应该用来保存持久化数据,持久化数据应该当用户离开当前的 activity时,在 onPause() 中保存(比如将数据保存到数据库或文件中)。说到这里,还要说一点的就是在onPause()中不适合用来保存比较费时的数据,所以这点要理解。
onRestoreInstanceState()被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行 此也说明上二者,大多数情况下不成对被使用。可以用旋转屏幕来测试其的调用时机。