1. 项目中遇到一个问题,在一个webview的页面上长按,弹出系统的“复制”和“搜索”,点击“搜索”,程序死机,报错启动外部Activity时要设置一个 FLAG_ACTIVITY_NEW_TASK ,但是搜索启动的是系统的浏览器,我根本就没有startActivity ,找了半天,找到有个哥们跟我遇到了同一个问题 ,见链接:http://hi.baidu.com/cenxcen/item/8ba7a0f3715e3310ce9f32c1
我写的就是下面这段代码,R.layout.sub_xeb_webview中含有一个webview
for (int i = 0; i < items.size(); i++) {
View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.sub_xeb_webview, null);
mListPagerViews.add(view);
}
getApplicationContext() 导致的,网络上那么多神人说,用getApplicationContext()代替this ,可以优化内存,我上次就是出于这个想法就使用了它,结果内存真的不增加了,很有效果,所以我这里也用了万能的getApplicationContext() ,但这个东西是悲剧的开始,确实很坑爹,不要随便乱用哦,要在理解的基础上使用。
getApplicationContext()改成this后,点击“搜索”,不在挂机了。但是这样会产生另外一个问题,也就是我以前为什么讲this改成getApplicationContext()!!!
2. 话说很久以前,代码是这样的
for (int i = 0; i < items.size(); i++) {
View view = LayoutInflater.from(this).inflate(R.layout.sub_xeb_webview, null);
mListPagerViews.add(view);
}
这样写会有一个什么问题呢?在这个Activity以及前一个Activity之间不停切换,最后程序自动退出到主页面,没有ANR ,没有错误提示,基本上可以理解成页面崩溃。我就新建了一个工程,专门用来测试这段代码,开始怀疑是不停的LayoutInflater.from(this).inflate(R.layout.sub_xeb_webview, null); 导致的,换成下面的样子
for (int i = 0; i < items.size(); i++) {
View view = new View(this);
mListPagerViews.add(view);
}
居然不崩溃了,继续定位,直到换成下面的代码
for (int i = 0; i < items.size(); i++) {
WebView view = new WebView (this);
mListPagerViews.add(view);
}