安卓最新面试系列专题 二

作者: lonamessi | 来源:发表于2018-08-20 22:11 被阅读15次
1.Service生命周期

service有两种启动方式,其生命周期也不一样。

  • startService
    startService----> onCreate()---->onStartcomand()---->StopService----->onDestroy();
    其中只有onStartcomand()可以被调用多次
  • bindService
    bindService---->onCreate()----->onBind()---->unBindService---->onUnBind()---->onDestroy();

两者区别
start和stop只能开启和关闭,无法操作service。bind和unbind可以操作service。
start开启的service,调用者退出后service仍然存在。bind开启的service,调用者退出后,随着调用者销毁。

bingservice 这种方式进行启动service好处是更加便利activity中操作service,比如加入service中有几个方法,a,b ,如果要在activity中调用,在需要在activity获取ServiceConnection对象,通过ServiceConnection来获取service中内部类的类对象,然后通过这个类对象就可以调用类中的方法,当然这个类需要继承Binder对象

2.Activity和Service的交互方式
3.有序广播和无序广播的区别

普通广播通过Context.sendBroadcast()方法来发送。它是完全异步的。
有序广播是通过Context.sendOrderedBroadcast来发送。所有的receiver依次执行
BroadcastReceiver可以使用setResult系列函数来结果传给下一个BroadcastReceiver,通过getResult系列函数来取得上个BroadcastReceiver返回的结果,并可以abort系列函数来让系统丢弃该广播让,使用该广播不再传送到别的BroadcastReceiver

4.进程保活(不死进程)
  • 黑色保活:不同的app进程,用广播相互唤醒(包括利用系统提供的广播进行唤醒)
  • 白色保活:启动前台Service
  • 灰色保活:利用系统的漏洞启动前台Service
    详细讲解
5.理解Activity,View,Window三者关系

这个问题真的很不好回答。所以这里先来个算是比较恰当的比喻来形容下它们的关系吧。Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸。
1、在Activity中调用attach,创建了一个Window
2、创建的window是其子类PhoneWindow,在attach中创建PhoneWindow
3、在Activity中调用setContentView(R.layout.xxx)
4、其中实际上是调用的getWindow().setContentView()
5、调用PhoneWindow中的setContentView方法
6、创建ParentView:
作为ViewGroup的子类,实际是创建的DecorView(作为FramLayout的子类)
7、将指定的R.layout.xxx进行填充
通过布局填充器进行填充【其中的parent指的就是DecorView】
8、调用到ViewGroup
9、调用ViewGroup的removeAllView(),先将所有的view移除掉
10、添加新的view:addView()
4:这些View的事件监听,是由WindowManagerService来接受消息,并且回调Activity函数。比如onClickListener,onKeyDown等。

相关文章

网友评论

    本文标题:安卓最新面试系列专题 二

    本文链接:https://www.haomeiwen.com/subject/ejlfiftx.html