java常问知识点---android篇(二)

如何让service不被杀死?
  1. 开机启动。 实现一个BroadcastReceiver, 监听手机启动完成的事件ACTION_BOOT_COMPLETED
  2. 若是用户主动关闭service,可以启动一个timmer或者BroadcastReceiver 每个一段时间去startService,此方法不会启动多个service 而是会多次调用onStart .
  3. 若是该应用进程被杀死,那只能从系统考虑了
intent(意图)

intent是提供组件调用的相关信息,显示intent表示直接告诉需要调用的组件,如
new intentt(this,DetailActivity.class),明显地告诉了需要调用DetailActivity; 而隐式需要系统去分析intent给出的intent-filter里的action,category等信息,才能找到要打开的组件; 所以有可能打开失败导致程序崩溃的情况,但其耦合度较低

四大组件: activity\service\broadcastReceiver\contentProvider
  1. activity . 生命周期
onCreate -> onStart -> onRsume -> onPause -> onStop -> onDestory

activity的四种加载模式

standard 
singleTop 若activity已在栈顶,则不新建
singleTop 将栈上位于该activity的全部出栈
singleInstance 拥有单独任务栈,如: 呼叫来电界面
  1. 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代码里

  1. contentProvider
    把应用中的数据共享给其他应用访问

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值