第二次调用LocalActivityManager&n…

本文介绍了一种改进的Activity销毁方式,通过直接操作LocalActivityManager内部字段来移除Activity记录,确保资源完全释放。
将activityManager.destroyActivity(id, true);改为以下代码:
  1. public static boolean destroy(ActivityGroup activityGroup, String id)  
  2. final LocalActivityManager activityManager activityGroup.getLocalActivityManager();  
  3. if(activityManager != null){  
  4. activityManager.destroyActivity(id, false);  
  5. try  
  6. final Field mActivitiesField LocalActivityManager.class.getDeclaredField("mActivities");  
  7. if(mActivitiesField != null){  
  8. mActivitiesField.setAccessible(true);  
  9. @SuppressWarnings("unchecked")  
  10. final Map mActivities (Map)mActivitiesField.get(activityManager);  
  11. if(mActivities != null){  
  12. mActivities.remove(id);  
  13.  
  14. final Field mActivityArrayField LocalActivityManager.class.getDeclaredField("mActivityArray");  
  15. if(mActivityArrayField != null){  
  16. mActivityArrayField.setAccessible(true);  
  17. @SuppressWarnings("unchecked")  
  18. final ArrayList mActivityArray (ArrayList)mActivityArrayField.get(activityManager);  
  19. if(mActivityArray != null){  
  20. for(Object record mActivityArray){  
  21. final Field idField record.getClass().getDeclaredField("id");  
  22. if(idField != null){  
  23. idField.setAccessible(true);  
  24. final String _id (String)idField.get(record);  
  25. if(id.equals(_id)){  
  26. mActivityArray.remove(record);  
  27. break;  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34. catch (Exception e)  
  35. e.printStackTrace();  
  36.  
  37. return true;  
  38.  
  39. return false;  
  40. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值