Android有很多fragment时如何节省内存
我在做一个项目,界面非常多,大概30多个,都是用fragment实现的,担心非常占内存,所以想请教一下当Activity的fragment非常多的时候,怎样节约内存?我之...
我在做一个项目,界面非常多,大概30多个,都是用fragment实现的,担心非常占内存,所以想请教一下当Activity的fragment非常多的时候,怎样节约内存?
我之前用new来声明fragment,然后add。但是遇到一个问题,就是进程资源被回收之后重建,fragment也重建但是不能响应事件了,所以后来改成xml方式声明了,但是这样可能会造成严重的内存问题,所以想请教一下该怎么办 展开
我之前用new来声明fragment,然后add。但是遇到一个问题,就是进程资源被回收之后重建,fragment也重建但是不能响应事件了,所以后来改成xml方式声明了,但是这样可能会造成严重的内存问题,所以想请教一下该怎么办 展开
4个回答
展开全部
android 中很多fragment节省内存,主要通过限制每个fragment实例化的次数,可以通过如下方式:在项目中需要进行Fragment的切换,一直都是用replace()方法来替换,替换之后,就可以不用再重新实例化fragment,Fragment:
public void switchContent(Fragment fragment) {
if(mContent != fragment) {
mContent = fragment;
mFragmentMan.beginTransaction()
.setCustomAnimations(android.R.anim.fade_in, R.anim.slide_out)
.replace(R.id.content_frame, fragment) // 替换Fragment,实现切换
.commit();
}
}
展开全部
LZ不用add,用一个transaction 的replace函数,这样每次切换都会把上一次的fragment回收了,就不存在内存问题了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
出现了这种情况你可以使用对象的单例来解决:
就是构造函数的私有化:比如最里面的那个fragment
class
fragment1
extends
fragment{
private
fragment1
f
=
null;
//在这里私有化他的构造函数
private
fragment1(){
}
//创建改fragment的实例:
public
static
fragment1
getinstance(){
if(fragment1
==
null){
fragment1
f
=
new
fragment();
return
f;
}else{
return
f;
}
}
}
//这样整个工程就只能有fragment1的一个实例。
就是构造函数的私有化:比如最里面的那个fragment
class
fragment1
extends
fragment{
private
fragment1
f
=
null;
//在这里私有化他的构造函数
private
fragment1(){
}
//创建改fragment的实例:
public
static
fragment1
getinstance(){
if(fragment1
==
null){
fragment1
f
=
new
fragment();
return
f;
}else{
return
f;
}
}
}
//这样整个工程就只能有fragment1的一个实例。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就用代码动态生成。
追问
恩,我之前是用代码动态生成的,但是调用相机之类的程序回来之后,进程就被杀死重建了。。。fragment发生了重叠,使用xml就不会重叠
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询