【最新Android高级面试知识点干货分享(五)】

【最新Android高级面试知识点干货分享(四)】
转载请注明出处!

三、Service/IntentService

Service作为四大组件之一,也是面试官喜欢问的。
一般包括:启动方式、生命周期、Binder机制、保活以及唤醒等。

  • 启动方式:startService/bindService

  • 生命周期:

      onCreate--onStartCommand--onDestroy
      onCreate--onBind--onStart---onUnbind--onDestroy
    
  • Binder机制:IBinder/Stub/AIDL

      属于C/S架构,Service通过onBind方法,
      返回给客户端IBinder接口实例。
      更详细的见下面的AIDL
    

由于Service默认支行在主线程(ActivityThread)中,因此当在Service中执行耗时操作时,会阻塞UI线程,导致ANR.为此系统提出了IntentService来在子线程中开启服务,处理耗时操作。

  • IntentService:

      原理:是在onCreate()方法里面,
      通过HandlerThread来创建线程,开启线程
    

四、BroadCast/LocalBroadCast

广播知识点:种类、注册方式、使用广播时在应用安全方面注意事项。

广播的种类有:有序广播、无序广播、粘性广播

注册方式:静态注册(AndroidManifest.xml)、动态注册

BroadCast是系统级别,采用Binder通信机制;
LocalBroadCast本地广播,属应用级别,采用Handler通信机制。
如果没有与第三方通信,则推荐使用LocalBroadCast。

五、ContentProvider

内容提供者,专用于应用 间数据共享。
注意点:

  • ContentObserver

  • ContentResolver:

      ContentObserver用于观察ContentProvider中的变化,
      而它是通过ContentResolver的
      registerContentObserver()与unregisterContentObserver()
      来进行注册与注销。
      
      当ContentProvider中有变化时,
      就会回调ContentObserver中的onChange()方法
    

由于Android权限,在Android7.0以上,得用FileProvider(为ContentProvider的子类)
Android 7.0 禁止在应用外部公开 file:// URI,所以我们必须使用 content:// 替代 file://,这时主要需要 FileProvider 的支持,还需要动态申请访问SD卡目录的权限。

1,在AndroidManifest.xml中指定

	<provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermission="true">
        <meta-data 
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths_test"></meta>
      </provider>
        

2,在res下创建xml目录,然后在res/xml/下创建file_path_test的xml文件(主要是指定sdk的路径)

  <?xml version="1.0" encoding="utf-8"?>
        <paths>
            <external-path path="." name="external_storage_root">
        </paths>

(下一篇将整理分享Android自定义View、Android动画)

原创文章 80 获赞 34 访问量 17万+

猜你喜欢

转载自blog.csdn.net/u011153817/article/details/105858569