Android——基本知识大杂烩

一:关于四大组件
startService ->onCreate ->onStartCommand -> stopService/stopSelf ->onDestroy
note:
调用多次startService方法,onStartCommand方法就会执行一次,但是没个服务都只存在一个实例,所以不管调用了多少次startService,只需要调用一次stopService 或者stopSelf方法。
bindService ->onCreate ->onBind -> unBindService ->onDestroy
note:
bind方法的调用,service方法和调用方的生命周期绑定,只要调用方和服务之间没有断开,服务就一直保持运行状态。

note:
如果调用了startService方法又调用了bind方法,如何才能销毁一个服务呢?根据android的系统机制,一个服务被启动或者被绑定之后就会一直处于运行状态,必须要两种条件同时不满足,服务才能够被销毁。
所以要同时调用stopService和unbindService方法,onDestroy方法才会被执行。

前台服务:
startForeground方法即可使服务变成前台服务,优点,可以获得更多的cpu资源,在系统资源紧张的时候不至于被资源回收杀掉。
note:
在Android P版本之后,需要声明android.permission.FOREGROUND_SERVICE权限,否则crash。

IntentService:
onHandleIntent 执行完之后,自动关闭服务,同时运行在子线程中。无须自己开启服务。

ContentProvider:
访问其他程序的数据:
getContentResolver方法
提供数据给其他程序:
extends Provider实现六个方法:oncreate、getType、query、insert、delete、update。

广播Broadcast Receiver:
1.标准广播
异步执行广播,无法中断。
sendBroadcast
2.有序广播
同步执行广播,同一时刻只有一个广播接收器可以接收到这条广播消息,一个广播接收器的逻辑执行完毕之后广播才会传递。
sendOrderBroadcast
abortBroadcast 对有序广播进行截断
3.本地广播
LocalBroadcastManager、Localreceiver


Handler、Message、MessageQueue和Looper:
Handler,处理者,负责发送和处理消息;
Message,消息,用于在线程之间传递数据;
MessageQueue,消息队列,用来存放所有通过Handler发送的消息,存放队列中,等待被处理,一个线程中只有一个MessageQueue对象;
Looper,消息泵,是每个线程中MessageQueue的管家,调用Looper的looper方法之后,进入一个无限循环中,每当发现MessageQueue中存在一条新的消息,则取出传递到Handler中,一个线程中只有一个Looper对象;

Handler发送Message到MessageQueue通过Looper转发到handler中进行处理。


二:关于内存泄漏
内存泄漏包括:
静态变量、内部类、匿名类、单例持有外部变量、线程、Handler、AsyncTask、Timer Tasks 。
解决办法:
去掉不合理的静态变量,使用弱引用,修改为静态匿名类,在合适的时机注销注册监听等。
一句话总结:
干掉不合理的静态变量、注意生命周期结束之后后台进行的任务有没有持有组件对象。

AIDL不可以声明同名函数,即使函数中的参数不同

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值