android2.2的LocalActivityManager的destroyActivity()问题
来源:互联网 发布:大一c语言考试重点 编辑:程序博客网 时间:2024/05/19 07:45
今天在用ActivityGroup做例子,发现了个问题,并采用了个笨办法暂时解决。
首先看LocalActivityManager的destroyActivity()的源码:
/** * Destroy the activity associated with a particular id. This activity * will go through the normal lifecycle events and fine onDestroy(), and * then the id removed from the group. * * @param id Unique identifier of the activity to be destroyed * @param finish If true, this activity will be finished, so its id and * all state are removed from the group. * * @return Returns the window that was used to display the activity, or * null if there was none. */ public Window destroyActivity(String id, boolean finish) { LocalActivityRecord r = mActivities.get(id); Window win = null; if (r != null) { win = performDestroy(r, finish); if (finish) { mActivities.remove(r); } } return win; }
大家可能已经发现remove的时候,错误,应该是remove(id)。不知道google的错误,还是故意这么做,不让删除。
这样以来在调用destroyActivity就没法删除,这样在做ActivityGroup的返回就会出错误。
具体ActivityGroup中Activity的返回代码如下:
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP){onBackPressed();}return super.onKeyDown(keyCode, event);}public void onBackPressed() {if(index>1){activityManager.destroyActivity((index)+"", true);boolean isWhile = true;while(isWhile){Activity activity = activityManager.getActivity((--index)+"");if(activity!=null){startActivityBack(activity);isWhile = false;break;}}}else{super.onBackPressed();}}
一下是在ActivityGroup中start和back调用的方法:
private int index = 0;public void startActivityForGroup(Intent intent) {boolean isWhile = true;while (isWhile) {Window window = activityManager.startActivity((++index)+"", intent);Log.d(TAG, "==window:"+window);Log.d(TAG, "==CurrentId:"+index);if(window!=null){isWhile = false;View decorView =window.getDecorView();contentView.removeAllViews();contentView.addView(decorView);break;}}}public void startActivityBack(Activity activity){if(activity.getWindow()==null)return;System.out.println("==view:"+activity.getWindow().getDecorView());contentView.removeAllViews();contentView.addView(activity.getWindow().getDecorView());}
这样,暂时能够保持正常返回。但是存在隐患。希望大家能够交互方法,让我们的代码更加完善。
- android2.2的LocalActivityManager的destroyActivity()问题
- LocalActivityManager的内部机制
- LocalActivityManager的内部机制
- LocalActivityManager的内部机制
- LocalActivityManager的用法
- LocalActivityManager说明 及 Activity的onResume不被执行问题
- android2.2 与 android2.3的区别
- Android2.2的移植
- 编译android2.2的源码出现问题,问题如下:
- Android2.2 HDMI 的声音输出的问题
- ActivityGroup's LocalActivityManager.destroyActivity() has a typo that prevents removing the Activit
- 过时api-Android LocalActivityManager的用法
- android2.2中EditText不可编辑的问题
- 对于Android2.2中的View无法访问Bitmap的问题
- [MINA]android2.2中使用mina注意的问题
- android2.2源码编译过程遇到的问题
- android2.2中使用mina注意的问题
- 关于编译android2.3的问题
- mysql权限问题
- 欧拉角
- C#使用yield关键字来提高性能和可读性
- 物理地址和虚拟地址
- Android 中文 API (101) —— AsyncTask
- android2.2的LocalActivityManager的destroyActivity()问题
- 英语练习135 Seven year's bad luck
- Hadoop FairScheduler的权限错误
- 有A和B两个表空间,把B空间中不存在的而A空间存在的表导入到B空间
- php Windows下的Memcache安装
- 我的第三十一个C++上机报告(转化成2进制)
- 2011推荐系统论坛游记:爱的反义词不是恨
- mysql query优化原则
- Android Web App官方文档翻译第四章:调试