ActivityGroup's LocalActivityManager.destroyActivity() has a typo that prevents removing the Activit

来源:互联网 发布:淘宝定金和尾款退款 编辑:程序博客网 时间:2024/06/06 00:32
 
Here is the fix:
public boolean destroy(String id) {final LocalActivityManager activityManager = if(activityManager != null){activityManager.destroyActivity(id, false);// http://code.google.com/p/android/issues/detail?id=12359// http://www.netmite.com/android/mydroid/frameworks/base/core/java/android/app/LocalActivityManager.javatry {final Field mActivitiesField = LocalActivityManager.class.getDeclaredField("mActivities");if(mActivitiesField != null){mActivitiesField.setAccessible(true);@SuppressWarnings("unchecked")final Map mActivities = (Map)mActivitiesField.get(activityManager);if(mActivities != null){mActivities.remove(id);}final Field mActivityArrayField = LocalActivityManager.class.getDeclaredField("mActivityArray");if(mActivityArrayField != null){mActivityArrayField.setAccessible(true);@SuppressWarnings("unchecked")final ArrayList mActivityArray = (ArrayList)mActivityArrayField.get(activityManager);if(mActivityArray != null){for(Object record : mActivityArray){final Field idField = record.getClass().getDeclaredField("id");if(idField != null){idField.setAccessible(true);final String _id = (String)idField.get(record);if(id.equals(_id)){mActivityArray.remove(record);break;}}}}}}} catch (Exception e) {e.printStackTrace();}return true;}return false;} 

原创粉丝点击