1.Activity相关。launchmode,OnSaveInstnceState,生命周期等。 4种默认的launchmode,以及OnNewIntent的回调。OnNewIntent->OnRestart->OnStart->onResumeOnAct ...
1.Activity相关。launchmode,OnSaveInstnceState,生命周期等。
4种默认的launchmode,以及OnNewIntent的回调。
OnNewIntent->OnRestart->OnStart->onResume
OnActivity->OnResume.
OnNewIntent ,OnActivityResult?
OnNewIntent launchmode with singletask or singleInstance.
but if set these two mode. OnActivityResult will be called after startActivityforResult directly。
so normally,they can not called both.
OnSaveInstanceState:
在Activity这个方法的地方有一段描述:当activity将要被kill的时候,系统会开放这个借口供程序员调用
然后它会把bundle信息传递到OnCreate & Bundle里面。
这个方法一定会在OnStop之前被调用,but 与OnPause的顺序无法确定。
某些情况下,生命周期不会走到OnDestroy,但是有些资源需要释放。这时候,最好是事件驱动。
2.Fragment相关技术。
Fragment 的生命周期:Android四大组件之Activity & Fragement
Fragment和activity沟通,
fragmentmaneger.findFragmentById
fragmentmaneger.findFragmentByTag,
fragment之间的沟通,setArgument。
getActivity & addlistener等。
数据存储和恢复。onSaveInstanceState:Fragment的该func同Activity同步。
FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务
transaction.add()
往Activity中添加一个Fragment
transaction.remove()
从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。
transaction.replace()
使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~
transaction.hide()
隐藏当前的Fragment,仅仅是设为不可见,并不会销毁
transaction.show()
显示之前隐藏的Fragment
detach()
会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
attach()
重建view视图,附加到UI上并显示。
transatcion.commit()//提交一个事务
注意:常用Fragment的哥们,可能会经常遇到这样Activity状态不一致:State loss这样的错误。主要是因为:commit方法一定要在Activity.onSaveInstance()之前调用。
上述,基本是操作Fragment的所有的方式了,在一个事务开启到提交可以进行多个的添加、移除、替换等操作。
值得注意的是:如果你喜欢使用Fragment,一定要清楚这些方法,哪个会销毁视图,哪个会销毁实例,哪个仅仅只是隐藏,这样才能更好的使用它们。
其他问题:Android Fragment 真正的完全解析(下)
FragmentTransaction.addToBackStack(String):如果是replace的方法,那么当前fragment会被remove掉,所有back的时候,fragment的状态不会保留,只会重新
创建。而如果是hide & add的方法,就会把之前的fragment重新attch上。
如果activity管理fragment,可以调用fragment的所有public方法。
可以通过findfragmentbyid & findfragmentbytag来定位fragment,然后同上。
fragment可以通过getactivity获得实例。
当屏幕旋转是,fragment会被重复创建,这是时候如果使用OnCreate的bundle参数,就可以判断是否是第一次创建。
activity的默认实现bundle参数是有内容的。
3.序列化技术,Parcable & Serializable.
android 进程间通信数据(一)------parcel的起源
为什么要序列化:为了跨进程通信,应为进程间通信就是二进制格式,所以序列化可以通过反序列化,把数据还原。
parcable是内存机的序列化,所以速度快。
4.fastJson & GSon的使用
package com.joyfulmath.publibrary.json;import com.alibaba.fastjson.JSON;import com.joyfulmath.publicutils.utils.TraceLog;/** * @author deman.lu * @version on 2016-03-24 17:20 * 使用fastjson 来解析该问题 */public class JsonUtils { public static <T> T parseObject(String jsonStr, Class<T> entityClass) { T ret = null; try { ret = JSON.parseObject(jsonStr,entityClass); }catch (Exception e) { TraceLog.e("parseObject-something Exception with:" + e.toString()); } return ret; } public static String toJSONString(Object obj) { String ret = null; try { ret = JSON.toJSONString(obj); } catch (Exception e) { e.printStackTrace(); } return ret; }}
原标题:Android 面试题及答案(2)
关键词:Android
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。