你的位置:首页 > 软件开发 > 操作系统 > Android 面试题及答案(2)

Android 面试题及答案(2)

发布时间:2016-09-25 15:00:09
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的使用

Android 面试题及答案(2)Android 面试题及答案(2)
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 (#换成@)。

可能感兴趣文章

我的浏览记录