第3章 Android基础相关面试题

1、Activity问题讲解

  a)  Activity的生命周期

    1.Activity的4种状态

      running  /  paused  /   stopped  /  killed

      running:activity处于活动状态,用户可以点击屏幕,屏幕做出响应,此时该activity处于栈顶

      paused:activity失去焦点,用户不能点击,或者被一个非全屏activity占据、透明界面放入栈顶

      stopped:当该activity被完全覆盖

      killed:被android系统回收

    2.Activity的生命周期

      Activity启动->onCreate()->onStart()->onReasume()

        点击Home键回到主界面(Activity不可见)->onPause()->onStop()

        当我们再次回到原activity时->onRestart()->onStart()->onReasume()

                    退出当前activity时->onPause()->onStop()->onDestroy()

     3.Android进程优先级

      前台进程:正在前台和用户交互的activity或者是和前台activity绑定的service
      可见进程:处于前台但是用户不能点击
      服务进程:在后台开启一个服务
      后台进程:前台进程点击hone键后就变成了后台进程
      空进程:不属于前面四种进程,android系统随时可以杀掉

  b)  Android的任务栈

      

 

  c)   Activity启动模式

      standard 标准模式:默认的启动模式
      singleTop 栈顶复用模式:须要创建的Activity已经处于栈顶时,此时会直接复用栈顶的Activity。不会再创建新的Activity;若须要创建的Activity不处于栈顶,此时会又一次创建一个新的Activity入栈,同Standard模式一样
      singleTask 栈内复用模式:若须要创建的Activity已经处于栈中时,此时不会创建新的Activity,而是将存在栈中的Activity上面的其他Activity所有销毁,使它成为栈顶。
      singleInstance 单实例模式:SingleInstance比較特殊,是全局单例模式,是一种加强的SingleTask模式。它除了具有它所有特性外,还加强了一点:具有此模式的Activity仅仅能单独位于一个任务栈中。

   d)   Scheme跳转协议

     Android中的Scheme是一种页面内跳转协议,通过自定义Scheme协议,可以跳转到app中的任何页面。

      服务器可以定制化跳转app页面
      app可以通过Scheme跳转到另一个app页面
      可以通过h5页面跳转app原生页面
     协议格式
      Uri.parse("qh://test:8080/goods?goodsId=8897&name=fuck")
      qh代表Scheme协议名称
      test代表Scheme作用的地址域
      8080代表改路径的端口号
      /goods代表的是指定页面(路径)
      goodsId和name代表传递的两个参数

     Scheme使用

      http://blog.csdn.net/lishuiyuntian/article/details/77477756

2、Fragment问题讲解

  a) Fragment为什么会被称为第五大组件

  b)   Fragment加载到Activity中的两种方式

    1.静态加载

     xml方式

    2.动态加载

     FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.collapseActionView,new Fragment());
        fragmentTransaction.commit();

 

      c)   FragmentPageAdapter与FragmentStatePageAdapter区别
    FragmentPageAdapter适用于界面较少的情况
    FragmentStatePageAdapter适用于界面较多的情况
    看源码中的destroyItem函数发现FragmentStatePageAdapter在Viewpage切换界面的时候会真正的回收内存,而FragmentPageAdapter不会

  d) Fragment的生命周期

      

  e)  Fragement之间的通信

    1.Fragemnt调用Activity中的方法

      通过getActivity()  方式

    2.Activity调用Fragment中的方法

      接口回掉

    3.Fragment调用Fragment中的方法

/*通过findFragmentById获取Fragment*/  
fragment = (MyFragment) manager.findFragmentById(R.id.fragment1);

 

    4. Fragment的replce、add、remove分别是什么作用,replace 和 add方法有什么区别

      replace:替换Fragment的栈顶页面

      add:添加Fragment到栈顶页面

      remove:移除Fragement栈顶页面

 

3、Service问题讲解

  a)  Service的应用场景,以及和thread的区别    

     1. Service是什么?

     2. Service和Thread的区别

  b)  开启Service的俩中方式以及区别?

    1.startService

    2.bindService

 

4、broadcast问题讲解

  a) 广播

   1.广播的定义

    2.广播的场景

    3.广播的种类

    普通广播(Normal Broadcast):sendBroadcast()

    系统广播(System Broadcast)

    有序广播(Ordered Broadcast):sendOrderedBroadcast()

    粘性广播(Sticky Broadcast)

    App 应用内广播(Local Broadcast )

      1.注册广播时将exported属性设置为false,使得非本App内部发出的此广播不被接收;

      2.在广播发送和接收时,增设相应权限permission,用于权限验证;

      3.发送广播时指定该广播接收器所在的包名,此广播将只会发送到此包中的App内与之相匹配的有效广播接收器中。

  b) 实现广播

  c) 广播实现机制

    1.自定义广播接收者BroadcastReceiver,并重写onReceiver()方法

    2.广播接收者BroadcastReceiver通过Binder机制向AMS(Activity Manager Service)进行注册

    3.广播发送者通过binder机制向AMS发送广播;

    4.AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;

    5.消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法

  d)LocalBroadcastManager详解

    1.因广播数据在本应用范围内传播,你不用担心隐私数据泄露的问题

    2.不用担心别的应用伪造广播,造成安全隐患。

    3.相比在系统内发送全局广播,它更高效。

    LocalBroadcastManager 核心实现实际还是 Handler,因为是 Handler 实现的应用内的通信,这就可以理解上述所说的三个优点,本APP通信、不受非本APP广播影响、效率高,并且无法跨进程通信。

5、webview安全漏洞问题讲解

  a)webview常见的一些坑

    1. webview 在android api16以及之前版本的安全漏洞,该漏洞是因为程序没有正确的限制webview.addjavascriptinterface方法,让远程攻击者可以使用java的反射机制利用该漏洞执行任意的java对象方法。

    2. webview动态添加到其他布局的时候,在activity销毁的生命周期时,需要主动调用webview.removeallviews和webview的ondestory方法释放内存,否则会导致内存泄漏。

    3.jsbridge ,js桥可以允许远程网页端与android的native端进行通信,通俗的说就是使用js桥可以在android代码中调用网页的js方法,也可以让js调用原生的代码

    4. webview.onpagefinished方法,该方法并不靠谱,按照api上面的说法,在web页面完全加载完成的时候会回调该方法,但在实际应用过程中,该方法在跳转url的时候会被多次调用,更加靠谱的方法是使用onprogresschange方法代替该方法的功能,当newProgress为100的时候,即是页面加载完成。

    5. 后台耗电问题,webview加载网页的时候,会自动创建线程,如果如果使用不当,这些线程会永远在后台运行,导致你的应用耗电量居高不下,这个问题的解决方式是在activity的ondetory方法中销毁webview。

    6. webview硬件加速导致渲染问题,比如加载的时候会有闪屏现象,解决方式就是暂时关闭硬件加速。

    7. webview导致内存溢出的原因,主要是因为内部类持有外部类的引用导致外部类无法释放的问题。

 

6、binder问题讲解

  a)  Linux内核的基础知识

    进程隔离/虚拟地址空间

   b)  Binder通信机制介绍

    为什么要使用binder

      Android使用的Linux内核拥有着非常多的跨进程通信机制

      性能

      安全

             Binder通信模型

      通信录:binder驱动

     电话基站:serviceManager

       Binder通信机制原理

    http://blog.csdn.net/freekiteyu/article/details/70082302

  c)    AIDL的实现

    AIDL(Android Interface Define Language) 是IPC进程间通信方式的一种.

 

转载于:https://www.cnblogs.com/zhaojianhua/p/8582632.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值