• 面试总结


    一、service使用

    1.  Service的启动方式

    A. start方式:

    (1)start方式启动的Service的生命周期如下:

    • onCreate()--->onStartCommand()(onStart()方法已过时) ---> onDestory()

    (2) 使用Service的步骤:

    1.定义一个类继承Service
    2.在Manifest.xml文件中配置该Service
    3.使用Context的startService(Intent)方法启动该Service
    4.不再使用时,调用stopService(Intent)方法停止该服务

    (3)说明:如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和onStartCommand()。服务停止的时候调用 onDestory()。服务只会被停止一次。

    (4)特点:一旦服务开启跟调用者(开启者)就没有任何关系了。
    开启者退出了,开启者挂了,服务还在后台长期的运行。
    开启者不能调用服务里面的方法。

    B. bind方式

    (1)bind方式启动的Service的生命周期如下:

    • onCreate() --->onBind()--->onunbind()--->onDestory()

    (2)使用Service的步骤:

    1.定义一个类继承Service
    2.在Manifest.xml文件中配置该Service
    3.使用Context的bindService(Intent, ServiceConnection, int)方法启动该Service
    4.不再使用时,调用unbindService(ServiceConnection)方法停止该服务

    (3)注意:绑定服务不会调用onstart()或者onstartcommand()方法

    (4)特点:bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。

    绑定者可以调用服务里面的方法。

    参考链接:http://www.jianshu.com/p/2fb6eb14fdec

    二、aidl使用

    对于绑定服务传递数据,Service只局限于本地服务,无法使用服务进行跨进程间的交互。如果需要用到跨进程交互的话,需要用到一个新的技术-AIDL

    1、  aidl介绍

    AIDL是 Android Interface definition language的缩写,它是一种进程通信接口的描述,通过sdk解释器对器进行编译,会把它编译成java代码在gen目录下,类路径与aidl文件的类路径相同。

    2、  aidl跨进程传递基本数据类型

    AIDL默认情况下只能传递基本类型、String、List、Map、CharSequence。

       参考链接:

    1.http://www.cnblogs.com/plokmju/archive/2013/11/11/android_Service_aidl_NormalType.html

    三、AudioManager

    (1)AudioManager获取媒体焦点相关步骤:

    1. 获取AudioManager对象
    2. 注册OnAudioFocusChangeListener监听
    3. 就是在我们播放音乐的时候为AudioManager添加获取焦点的监听
    4. 在我们不用的时候将焦点释放掉一般我们是在ondestroy()方法中释放

    (2)AudioManager的几个常量:

    AUDIOFOCUS_REQUEST_GRANTED   永久获取媒体焦点(播放音乐)

    AUDIOFOCUS_GAIN_TRANSIENT  暂时获取焦点 适用于短暂的音频

    AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK Duck我们应用跟其他应用共用焦点 我们播放的时候其他音频会降低音量

    (3)声音类型,可取为STREAM_VOICE_CALL(通话)、STREAM_SYSTEM(系统声音)、STREAM_RING(铃声)、STREAM_MUSIC(音乐)、STREAM_ALARM(闹铃声)

    (4)AudioManager 主要方法介绍

    由于 AudioManager 该类方法过多,这里只讲述几个比较常用到的方法:

    方法:adjustVolume(int direction, int flags) 

    解释:这个方法用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。

    方法:getMode() 

    解释:返回当前音频模式。

    方法:getRingerMode() 

    解释:返回当前的铃声模式。

    方法:getStreamVolume(int streamType) 

    解释:取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。

    方法:setRingerMode(int ringerMode) 

    解释:改变铃声模式

    四、contentPrivider内容提供者

       内容提供者是Android系统中专门为应用程序之间的数据通讯开发的,正常来说应用程序之间是不允许数据通信的,但是内容提供者的作用就是让别的应用程序访问我们的数据库。想要学习内容提供者需要两个应用程序,一个作为内容提供者,一个作为内容访问者。

    1.创建一个数据库帮助类,用于数据的存储和访问,

       2.自定义一个内容提供者---创建一个类继承自contentProvider

       3.在清单文件中进行注册,表明本APP开启了一个内容提供者

    甲方:1.创建数据库  2.创建一个内容提供者,并实现对应的增删改查方法

       乙方:1.创建一个内容接收者  2.通过内容接收者,调用指定的APP的增删改查方法

    参考链接:http://xiechengfa.iteye.com/blog/1415829

    五、BroadcastReceiver

    Android广播分为两个方面:广播发送者和广播接收者

    (1)广播作为Android组件间的通信方式,可以使用的场景如下:
    1.同一app内部的同一组件内的消息通信(单个或多个线程之间);

    2.同一app内部的不同组件之间的消息通信(单个进程);

    3.同一app具有多个进程的不同组件之间的消息通信;

    4.不同app之间的组件之间消息通信;

    5.Android系统在特定情况下与App之间的消息通信。

    (2) BroadcastReceiver总体上可以分为两种注册类型:静态注册和动态注册。

           1).静态注册:
    直接在AndroidManifest.xml文件中进行注册。规则如下:

     

    <receiver android:enabled=["true" | "false"]

    android:exported=["true" | "false"]

    android:icon="drawable resource"

    android:label="string resource"

    android:name="string"

    android:permission="string"

    android:process="string" >

    . . .

    </receiver>

    2).动态注册:
    动态注册时,无须在AndroidManifest中注册<receiver/>组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册BroadcastReceiver。registerReceiver的定义形式如下:

    1 registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
    2 registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)

    参考链接:http://www.cnblogs.com/lwbqqyumidi/p/4168017.html

    六、Anr原因和解决

    参考链接:http://blog.csdn.net/lonlylove/article/details/42006285

    七、音频编解码流程介绍

    八、Framework层相关

  • 相关阅读:
    Markdown常用写法
    Vue.js学习篇
    ClassLoader
    Java内存篇
    Spring-AOP学习篇
    M3U8Downloader
    IngCrawler
    ulimit开启coredump时核心转储
    Linux下的bc计算器
    Maven相关介绍
  • 原文地址:https://www.cnblogs.com/fuyunmomo/p/7680258.html
Copyright © 2020-2023  润新知