android基础面试

来源:互联网 发布:张家庄隧道 知乎 编辑:程序博客网 时间:2024/04/20 01:23
1.Activity生命周期
    Activity启动:onCreate(),onStart(),onResume()
    点击home键回主界面:onPause(),onStop()
    返回Activity:onRestart(),onStart(),onResume()
    退出Activity:onPause(),onStop(),onDestroy()
    activity的优先级:前台、可见、服务、后台、空
    
2.Activity启动模式
    standard 默认,可多个叠加实例
    singleTop 当相同实例在栈顶,可直接调用,无需重新创建
    singleTask 在栈中找,如果有相同实例则直接调用并且把这个之上的全部destroy掉
    singleInstance 如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例

3.fragmentPagerAdapter和FragmentStatePagerAdapter区别?

    fragmentPagerAdapter是在页面较少的情况下使用,fragmentStatePagerAdapter切换viewpager时会回收内存,在页面较多的情况下更耗内存所以才使用。


4.fragment动态添加到Activity

    FragmentManager fragmentManager = getSupportFragmentManager();     //导V4包
    FragmentTransaction transaction= fragmentManager.beginTransaction();

    ContentFragment mContentFragment = (ContentFragment) fm.findFragmentById(R.id.id_fragment_container);  
    mContentFragment = new ContentFragment();  
    transaction.add(R.id.id_fragment_container,mContentFragment);
    transaction.commit();


5.在activity里调用fragment的方法和fragment传值给activity?
    fragment创建一个接口和一个接口回调的方法,接口里定义的方法传参给activity
    activity实现接口的方法
 举例:老板分派给员工做事,员工做完事情后需要给老板回复,老板对其做出反应(接口回调)


6.fragment的通讯方式?
    在fragment里调用activity的方法是getActivity
    在activity里调用fragment的方法是接口回调
    在fragment里调用fragment的方法是findFragmentById()


7.Service(不可以进行耗时操作)
    Service是一个可以长时间运行在后台,没有用户界面的应用组件。

8.Broadcast种类
   Normal Broadcast(普通广播):context.sendBroadcast
   System Broadcast(有序广播):context.sendOrderedBroadcast
   Local Broadcast(本地广播):只在APP内部传播

9.实现广播的方式:
   静态注册:在manifest注册一下就好了
   动态注册:在代码中实现,跟随activity的生命周期
   区别:动态注册是在代码中实现,静态注册是在manifest注册;
               activity销毁了,动态注册的broadcast也就失效了,但是静态注册不会。


10.handler是通过发送和处理Message和Runnable对象来关联相对应线程的MessageQueen。

防止handler内存泄漏:

   1.使用静态的handler;
   2.在onDestroy()里调用handler.removeCallbacksAndMessages(null
   3.handler内部持有外部Activity的弱引用WeakHandler


11.创建IntentService时,只需要实现构造方法和onHandleIntent(),onHandleIntent为异步方法,可以进行耗时操作。

12.View
  invalidate和requeatLayout都是重新绘制View的过程,这两个的区别?
  invalidate()会重新绘制ondraw(),requestLayout()是重新执行onMeasure()和onLayout(),不会执行onDraw().

13.总结出Androd应用的构建过程大致如下:
  1、生成R.java类文件
  2、将.aidl文件转换成.java类文件
  3、编译.java类文件生成class文件
  4、将class文件打包生成classes.dex文件
  5、通过build打包资源文件(包括res、assets、AndroidManifest.xml等)
  6、生成debug模式或者release模式签名的apk文件
  7、对apk文件进行对齐处理,这样可以让apk包减少内存