如何让service不被杀死?
- 开机启动。 实现一个BroadcastReceiver, 监听手机启动完成的事件ACTION_BOOT_COMPLETED
- 若是用户主动关闭service,可以启动一个timmer或者BroadcastReceiver 每个一段时间去startService,此方法不会启动多个service 而是会多次调用onStart .
- 若是该应用进程被杀死,那只能从系统考虑了
intent(意图)
intent是提供组件调用的相关信息,显示intent表示直接告诉需要调用的组件,如
new intentt(this,DetailActivity.class),明显地告诉了需要调用DetailActivity; 而隐式需要系统去分析intent给出的intent-filter里的action,category等信息,才能找到要打开的组件; 所以有可能打开失败导致程序崩溃的情况,但其耦合度较低
四大组件: activity\service\broadcastReceiver\contentProvider
- activity . 生命周期
onCreate -> onStart -> onRsume -> onPause -> onStop -> onDestory
activity的四种加载模式
standard
singleTop 若activity已在栈顶,则不新建
singleTop 将栈上位于该activity的全部出栈
singleInstance 拥有单独任务栈,如: 呼叫来电界面
- service
context.startService() ->onCreate()- >onStart()->Service running
context.stopService() | ->onDestroy() ->Service stop
<service android:name=".LocalService">
<intent-filter>
<action android:name="com.demo.SERVICE_DEMO" />
<category android:name="android.intent.category.default" />
</intent-filter>
</service>
startService:服务被启动之后,跟启动它的组件没有一毛钱关系
bindService:跟启动它的组件同生共死
可以两种启动混搭,如播放音乐,可以后台播放,但也可以调用播放音乐service中的方法,如暂停、播放等
3. broadcastReceiver
静态注册,在xml代码中
动态注册,在java代码里
contentProvider
把应用中的数据共享给其他应用访问ContentResolver
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。
Handler机制和原理
参考
http://blog.51cto.com/3387980/983502
https://blog.csdn.net/toast_tips/article/details/74725732
https://www.cnblogs.com/jiaowoxiaochen/p/4951746.html