分享免费的编程资源和教程

网站首页 > 技术教程 正文

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

goqiw 2024-09-16 19:21:06 技术教程 34 ℃ 0 评论

最新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>

<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>

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表