*转载请注明出处!*
三、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>
<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>
本文暂时没有评论,来添加一个吧(●'◡'●)