2017.8.15面试(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SiwenYY/article/details/77320730
这个时候的深圳,出去找工作还是需要很大的勇气,但是为了追求更好的生活,任何时候都阻挡不了我们向前的脚步,只能说一声:菇凉,加油!
面了四面,先是两面技术面,然后人事,然后产品总监。整个过程越来越顺手。由于好久没面试了,刚开始有点紧张。以下是面试过程中问到的技术问题,只是其中一部分。

1.Fragment的生命周期
onAttach(Activity)
当Fragment与Activity发生关联时调用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
创建该Fragment的视图
onActivityCreated(Bundle)
当Activity的onCreate方法返回时调用
onDestoryView()
与onCreateView想对应,当该Fragment的视图被移除时调用
onDetach()
与onAttach相对应,当Fragment与Activity关联被取消时调用
注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现

1.1 Fragment的生命周期

1.2 与Activity生命周期的对比

1.3 场景演示 
1.切换到该Fragment:

onAttach
onCreate
 : 创建的时候调用    
onCreateView:
 fragment创建的时候调用

onActivityCreated
onStart:
看得见的时候调用

onResume:获得焦点的时候调用


2.屏幕灭掉:

onPause:失去焦点时调用

onSaveInstanceState

onStop: 看不见的时候调用


3.屏幕解锁:

onStart

onResume


4.切换到其他Fragment:

onPause
onStop

onDestroyView


5.切换回本身的Fragment:

onCreateView
onActivityCreated

onStart
onResume


6.回到桌面:

onPause
onSaveInstanceState

onStop


7.回到应用

onStart
onResume


8.退出应用

onPause
onStop

onDestroyView
onDestroy:销毁的时候调用

onDetach


注:Fragment是activity 的一个小部分, 生命周期 与 activity的生命周期类似,只是比Activity多了一些生命周期。

onAttached() —— 当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。 onCreateView() —— 当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。 onActivityCreated() —— 当activity的onCreated()方法返回后调用此方法 onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。 onDetach() —— 当fragment和activity分离的时候,调用这个方法。

2.Fragment嵌套Fragment和Activity嵌套Fragment的区别
2.1 Activity嵌套Fragment

在需要嵌套Fragment的activity必须继承Android.support.v4.app.FragmentActivity

嵌套的Fragment必须继承android.support.v4.app.Fragment

 
    
  1. //必需继承FragmentActivity,嵌套fragment只需要这行代码
  2. getSupportFragmentManager().beginTransaction().replace(R.id.container,newMyFragment()).commitAllowingStateLoss();

2.2 Fragment嵌套Fragment
在项目中Activity A中嵌套Fragment B,Fragment B中再嵌套Fragment C
问题1:在点击Activity A中主菜单1进行切换时,报错Fragment C already added。
解决:在Framgent B中添加Fragment C 调用add()时先判断fragmentC.isAdded()
 
    
  1. FragmentManager fm=getActivity().getSupportFragmentManager();
  2. FragmentTransaction ft=fm.beginTransaction();
  3. if(!sub1Fragment.isAdded()){
  4. ft.add(R.id.rl_fragment_container, sub1Fragment).commit();
  5. }


问题2:修改后发现,Fragment C布局添加失败,同时切换主菜单2时,报错。

解决:这是Fragment的嵌套问题。FragmentB中的嵌套不能再用getActivity().getSupportFragmentManager(),要用getChildFragmentManager()

即上面代码应改为:

 
     
  1. FragmentManager fm=getChildFragmentManager();
  2. FragmentTransaction ft=fm.beginTransaction();
  3. if(!sub1Fragment.isAdded()){
  4.   ft.add(R.id.rl_fragment_container, sub1Fragment).commit();
  5. }

3.项目中用到的网络请求框架是什么,请说说对Volley框架的理解
项目中用到的是张鸿洋的okHttpUtils 框架

是Google在2013年Google I/O大会上基于HttpClient + HttpURLConnection来封装的,针对短、频、快的网络请求推出的一款新的网络通信框架,开源的。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。Volley 的特点:特别适合数据量小,通信频繁的网络操作。
优点
非常适合进行数据量不大,但通信频繁的网络操作。
内部分装了异步线程。
支持get,post网络请求。
图片下载。
可直接在主线程调用服务端并处理返回结果。
可以取消请求,容易扩展,面向接口编程。
缺点
对大文件下载 Volley的表现非常糟糕。
只支持http请求。
图片加载性能一般。
使用的是httpclient,HttpURLConnection。不过在android 6.0不支持httpclient了,如果想支持得添加org.apache.http.legacy.jar。
使用方法:
1. 创建一个RequestQueue对象。
2. 创建一个StringRequest对象。
3. 将StringRequest对象添加到RequestQueue里面。
 
     
  1. RequestQueue mQueue =Volley.newRequestQueue(context);
  2. StringRequest stringRequest =newStringRequest("http://www.baidu.com",
  3. newResponse.Listener<String>(){
  4. @Override
  5. publicvoid onResponse(String response){
  6. Log.d("TAG", response);
  7. }
  8. },newResponse.ErrorListener(){
  9. @Override
  10. publicvoid onErrorResponse(VolleyError error){
  11. Log.e("TAG", error.getMessage(), error);
  12. }
  13. });
  14. mQueue.add(stringRequest);


4.讲讲单例模式,单例模式中如何避免new 对象
Singleton (单例):在单例类的内部实现只生成一个实例,同时它提供一个静态的 getInstance() 工厂方法,让客户可以访问它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有;在单例类内部定义了一个 Singleton 类型的静态对象,作为外部共享的唯一实例。  
4.1 私有化的构造方法
为了避免在类外使用 new class  来创建对象实体,我们只允许使用我们设定好的公共方法来建立实例
4.2 私有化的静态变量
用于存储类的实例化对象。因为外部只能通过静态方法实例化对象,而存储容器又是在静态方法中被调用的,所以必须是静态的属性
4.3 公共的静态方法
用于存储实例化的对象,供外界获取

5.imageloader的理解

猜你喜欢

转载自blog.csdn.net/SiwenYY/article/details/77320730