Android开发中的一些问题
1、AndroidStudio运行项目提示:解析软件包错误
把图片中箭头所指的地方不勾选
2、使用ARouter报错:there’s no route matched the path
一般是不同的module使用了相同的一级路径。
ARouter要求path必须有两级路径/app/xxx,第一级路径是Group的名称,在Arouter第一次寻找到route的时候便删除了这个一级路径的group,因为一级路径的重复,再调用另一个module的一级路径是”app”的路由时,由于之前Warehouse.groupsIndex已经删除,便导致了there’s no route matched的错误。
3、Dialog在使用ContentProvider的时候不显示
Dialog在使用ContentResiver导入通讯录的时候不显示
解决办法:开启子线程,把导入过程放入子线程中操作
原因:暂且不知
4、调整AndroidStudio内存
在AndroidStudio安装目录下的bin文件夹里找到studio64.exe.vmoptions文件:
-Xms512m
-Xmx3072m
-XX:MaxPermSize=1024m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djna.nosys=true
-Djna.boot.library.path=
-da
修改其中的Xms、Xmx、XX:MaxPermSize。
其中-Xms 是JVM启动的起始堆内存,堆内存是分配给对象的内存。一般默认设置是128m,建议改成512m
其中-Xmx 是 Java 虚拟机启动时的参数,用于限制最大堆内存。所以这里也需要更改。这里的更改根据电脑的实际情况进行分配。笔者这里设置了3072m。
其中-XX:MaxPermSize 是指定最大的Permanent generation大小。Permanent generation space,实际上就是方法区,存储了Class的信息以及一些其他信息。有时开发时出现的错误如Permgen Space方面的,就是指这个内存溢出了。所以一般这个可以不改,也可以加大一点。
5、ViewPager+Fragment,Fragment销毁后重新加载页面空白
两种情况:
1、重写FragmentPagerAdapter的destroyItem()方法:
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
跳转到ViewPager页面时直接定位到第三个页面(或后面几个页面)时,切换到第一个页面,第一个页面空白。
2、不重写FragmentPagerAdapter的destroyItem()方法,当ViewPager页面显示过后被销毁然后再次显示时页面空白。
原因:
Fragment是绑定在Activity中的,Viewpager切换销毁Fragment时并没有走onDestroy()方法。Fragment中的全局变量也同样没有被释放回收。但是View已经被重新替换了:
if (mAdapter == null) {
mAdapter = new XiaoTookenAdapter(totals);
mAdapter.setOnItemClickListener(XiaoTookenFragment.this);
mAdapter.setLoadMoreView(new XiaoMeiLoadMoreView());
mAdapter.bindToRecyclerView(mRecyclerView);
mAdapter.setOnLoadMoreListener(XiaoTookenFragment.this, mRecyclerView);
} else {
mAdapter.notifyDataSetChanged();
}
mAdapter不为空走else,但是mRecyclerView已经重新findViewById了。
解决:
在onDestroyView()方法中释放资源,清空数据。或者在onCreateView()初始化数据。或者将contentView也保存下来,不要每次都重新inflate一个View。