使用TelephonyManager监听通话事件的内存泄露
来源:互联网 发布:医疗器械网络销售方法 编辑:程序博客网 时间:2024/05/17 08:36
//使用<span style="font-size: 17.0667px; font-family: Consolas;">TelephonyManager 对通话的监听</span>TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); PhoneState phoneState = new PhoneState(); telephonyManager.listen(phoneState, PhoneStateListener.LISTEN_CALL_STATE); //响铃 protected void phoneRinging() { } //接通 protected void phoneOffhook() { } //挂断 protected void phoneIdle() { } private class PhoneState extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_OFFHOOK: phoneOffhook(); break; case TelephonyManager.CALL_STATE_IDLE: phoneIdle(); break; case TelephonyManager.CALL_STATE_RINGING: phoneRinging(); break; } } }但是如果在Activity中执行这些代码,会导致内存泄露。重复进入Activity会导致OOM
所以在离开时可以执行
private void unRegisterPhoneState(){ if (phoneState!=null && telephonyManager!=null){ telephonyManager.listen(phoneState,PhoneStateListener.LISTEN_NONE); phoneState = null; telephonyManager = null; } }来释放资源,但是亲测过程中,在Android5.1以上的操作系统中,GC并不会立即回收Listen资源,具体我没有看为什么,所以我建议还是用Application的Context单例对上述情况进行操作。
笔者上次粗心犯下的错误,记录一下
0 0
- 使用TelephonyManager监听通话事件的内存泄露
- 监听事件的使用
- TelephonyManager.listen的使用
- telephonyManager的使用
- TelephonyManager类的使用案例
- Android TelephonyManager类的使用
- SubscriptionManager,SubscriptionInfo,TelephonyManager的使用
- TelephonyManager监听电话状态
- 电话通话几种状态的监听
- Android之监听phone的通话状态
- 求助:TelephonyManager.listen 监听使用的问题--如何实现TM同时监控多个状态的改变
- TelephonyManager使用
- 使用valgrind检测内存泄露的问题。
- WinDbg 调试工具的使用(内存泄露)
- 使用WinDBG调试内存泄露的问题
- 使用self. 导致的内存泄露
- 使用self. 导致的内存泄露
- 内存泄露检查工具BoundsChecker的使用
- 【Android】Popup Window 在 Android Activity无法弹出的问题
- Date类
- 介绍4个js插件
- Servlet 基础案例
- HTTP协议之Content-Encoding
- 使用TelephonyManager监听通话事件的内存泄露
- 点击按钮显示对应的图片
- 常用的Arrays类
- 【HDOJ 5812】Distance(约数拆分)
- BindService 流程分析
- Android中Toolbar的实现
- c++字符串转换
- URLEncode和URLDecode的使用jianji
- iOS开发 -UISearchController的使用和改善方法