的OutOfMemoryError装载活动时, [英] OutOfMemoryError when loading activities
问题描述
我有这样一个非常简单的活动:
I have a quite simple activity like this :
public class SurvivalActivity extends Activity {
private static final String KEY_LAYOUT_ID = "SurvivalLayoutId";
int mLayoutId;
private static final int[] mSurvivalLayouts = {
R.layout.survival1,
R.layout.survival2,
R.layout.survival3,
};
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent i = getIntent();
if (savedInstanceState != null && savedInstanceState.containsKey(KEY_LAYOUT_ID)) {
mLayoutId = savedInstanceState.getInt(KEY_LAYOUT_ID, 0);
} else if (i != null) {
mLayoutId = i.getIntExtra(KEY_LAYOUT_ID, 0);
} else {
mLayoutId = 0;
}
// Layout
setContentView(mSurvivalLayouts[mLayoutId]);
// Title
Util.setTitleFont(this, findViewById(R.id.title));
// "Next" button
final View nextButton = findViewById(R.id.survival_next);
Util.setFont(this, nextButton, "Lobster.ttf");
nextButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
final Intent next = new Intent(SurvivalActivity.this, SurvivalActivity.class);
next.putExtra(KEY_LAYOUT_ID, (mLayoutId + 1) % mSurvivalLayouts.length);
startActivity(next);
finish();
}
});
}
@Override
protected void onSaveInstanceState(final Bundle outState) {
outState.putInt(KEY_LAYOUT_ID, mLayoutId);
}
}
这两种的Util。的 * 的静态方法只是改变的字体的TextView
。
The two Util.* static methods just change the font of the TextView
.
所有3布局是相当简单的,让我告诉你第一:
All 3 layouts are rather simple, let me show you the first :
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
style="@style/Title"
android:text="@string/surv1_title" />
<TextView
style="@style/Content"
android:text="@string/surv1_1" />
<ImageView
style="@style/Picture"
android:src="@drawable/surv_crafting" />
<TextView
style="@style/PicLegend"
android:src="@string/surv_crafting_leg" />
<ImageView
style="@style/Picture"
android:src="@drawable/surv_hache" />
<TextView
style="@style/PicLegend"
android:src="@string/surv_hache_leg" />
<ImageView
style="@style/Picture"
android:src="@drawable/surv_pioche" />
<TextView
style="@style/PicLegend"
android:src="@string/surv_pioche_leg" />
<TextView
style="@style/Content"
android:text="@string/surv1_2" />
<ImageView
style="@style/Picture"
android:src="@drawable/surv_charbon" />
<TextView
style="@style/PicLegend"
android:src="@string/surv_charbon_leg" />
<TextView
style="@style/Content"
android:text="@string/surv1_3" />
<ImageView
style="@style/Picture"
android:src="@drawable/surv_torch" />
<TextView
style="@style/PicLegend"
android:src="@string/surv_torch_leg" />
<TextView
style="@style/Content"
android:text="@string/surv1_4" />
<ImageView
style="@style/Picture"
android:src="@drawable/surv_abri" />
<TextView
style="@style/PicLegend"
android:src="@string/surv_abri_leg" />
<TextView
style="@style/Content"
android:text="@string/surv1_5" />
<Button
style="@style/SurvivalBoxNext"
android:text="@string/surv1_next" />
</LinearLayout>
</ScrollView>
正如你所看到的,它只是几个的TextView
s的的ImageView
S和A 按钮
触发下一个活动的负载。
As you can see it's just several TextView
s with ImageView
s, and a Button
that triggers the load of the next activity.
我启动应用程序,它显示的第一个屏幕。我向下滚动到按钮,单击时,显示第二个屏幕(带打嗝)。我向下滚动到按钮,点击,和繁荣。
I launch the app, it displays the first screen. I scroll down to the button, click, the second screen is displayed (with a hiccup). I scroll down to the button, click, and boom.
03-02 16:36:46.488 E/AndroidRuntime(10611): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.bicou.myapp/net.bicou.myapp.SurvivalActivity}: android.view.InflateException: Binary XML file line #72: Error inflating class <unknown>
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.app.ActivityThread.access$600(ActivityThread.java:122)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.os.Looper.loop(Looper.java:137)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.app.ActivityThread.main(ActivityThread.java:4340)
03-02 16:36:46.488 E/AndroidRuntime(10611): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 16:36:46.488 E/AndroidRuntime(10611): at java.lang.reflect.Method.invoke(Method.java:511)
03-02 16:36:46.488 E/AndroidRuntime(10611): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-02 16:36:46.488 E/AndroidRuntime(10611): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-02 16:36:46.488 E/AndroidRuntime(10611): at dalvik.system.NativeStart.main(Native Method)
03-02 16:36:46.488 E/AndroidRuntime(10611): Caused by: android.view.InflateException: Binary XML file line #72: Error inflating class <unknown>
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.view.LayoutInflater.createView(LayoutInflater.java:606)
03-02 16:36:46.488 E/AndroidRuntime(10611): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
03-02 16:36:46.488 E/AndroidRuntime(10611): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.app.Activity.setContentView(Activity.java:1835)
03-02 16:36:46.488 E/AndroidRuntime(10611): at net.bicou.myapp.SurvivalActivity.onCreate(SurvivalActivity.java:34)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.app.Activity.performCreate(Activity.java:4465)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
03-02 16:36:46.488 E/AndroidRuntime(10611): ... 11 more
03-02 16:36:46.488 E/AndroidRuntime(10611): Caused by: java.lang.reflect.InvocationTargetException
03-02 16:36:46.488 E/AndroidRuntime(10611): at java.lang.reflect.Constructor.constructNative(Native Method)
03-02 16:36:46.488 E/AndroidRuntime(10611): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.view.LayoutInflater.createView(LayoutInflater.java:586)
03-02 16:36:46.488 E/AndroidRuntime(10611): ... 25 more
03-02 16:36:46.488 E/AndroidRuntime(10611): Caused by: java.lang.OutOfMemoryError
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.graphics.Bitmap.nativeCreate(Native Method)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:524)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:499)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.content.res.Resources.loadDrawable(Resources.java:1937)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.widget.ImageView.<init>(ImageView.java:119)
03-02 16:36:46.488 E/AndroidRuntime(10611): at android.widget.ImageView.<init>(ImageView.java:109)
03-02 16:36:46.488 E/AndroidRuntime(10611): ... 28 more
03-02 16:36:46.520 W/ActivityManager( 211): Force finishing activity net.bicou.myapp/.SurvivalActivity
我不明白:
- 为什么previous活动不中解脱出来,腾出一些空间
- 为什么我的应用程序占用了这么多堆(
成长堆(破片的情况下),以60.869MB为3600016字节分配
) - 我该怎么做才能显示含有先后3活动,每次约10
的TextView
和10的ImageView
取值 - 如果我做错了什么,因为我看不出什么错在我的code,但显然有些不妥。
- Why the previous activities are not freed to free up some space
- Why is my app taking up so much heap (
Grow heap (frag case) to 60.869MB for 3600016-byte allocation
) - How can I do to display successively 3 activities containing each about 10
TextView
s and 10ImageView
s - If I did something wrong, because I can't see anything wrong in my code, but there is obviously something wrong.
感谢你。
编辑:第一个活动的照片大小:
picture sizes of the first activity:
-rw-r--r-- 1 bicou staff 167197 29 fév 16:42 surv_abri.jpg 600x377 px
-rw-r--r-- 1 bicou staff 24658 29 fév 16:42 surv_charbon.png 559x277 px
-rw-r--r-- 1 bicou staff 5285 29 fév 16:42 surv_crafting.png 214x121 px
-rw-r--r-- 1 bicou staff 4190 29 fév 16:42 surv_hache.png 214x121 px
-rw-r--r-- 1 bicou staff 3809 29 fév 16:42 surv_pioche.png 214x121 px
-rw-r--r-- 1 bicou staff 2252 29 fév 16:42 surv_torch.png 215x121 px
第二项活动:
Second activity:
-rw-r--r-- 1 bicou staff 3371 29 fév 16:42 surv_four.png 204x112 px
-rw-r--r-- 1 bicou staff 5059 29 fév 16:42 surv_glass.png 215x122 px
-rw-r--r-- 1 bicou staff 3176 29 fév 16:42 surv_malle.png 204x112 px
-rw-r--r-- 1 bicou staff 2676 29 fév 16:42 surv_pelle.png 204x112 px
-rw-r--r-- 1 bicou staff 167166 29 fév 16:42 surv_repere.png 528x331 px
-rw-r--r-- 1 bicou staff 134706 29 fév 16:42 surv_sand.jpg 854x480 px
第三个活动(崩溃):
Third activity (crashing):
-rw-r--r-- 1 bicou staff 58919 29 fév 16:42 surv_1.jpg 600x377 px
-rw-r--r-- 1 bicou staff 51144 29 fév 16:42 surv_2.jpg 600x377 px
-rw-r--r-- 1 bicou staff 46917 29 fév 16:42 surv_3.jpg 600x377 px
-rw-r--r-- 1 bicou staff 53226 29 fév 16:42 surv_4.jpg 600x377 px
-rw-r--r-- 1 bicou staff 37787 29 fév 16:42 surv_5.jpg 600x377 px
-rw-r--r-- 1 bicou staff 31050 29 fév 16:42 surv_6.jpg 600x377 px
-rw-r--r-- 1 bicou staff 38389 29 fév 16:42 surv_7.jpg 600x377 px
-rw-r--r-- 1 bicou staff 44471 29 fév 16:42 surv_8.jpg 600x377 px
和窗口背景:
-rw-r--r-- 1 bicou staff 30857 29 fév 16:42 background_img.png
编辑:
确定 - 我试图直接从code膨胀的意见,才能看到,如果我有一个越野车的形象。这是我的活动code(仅变量+ 的onCreate
的其余部分是相同的)
OK — I tried inflating the views directly from code in order to see if I had a buggy image. Here's my activity code (only variables + onCreate
as the rest is identical)
private static final int[] mTitles = {
R.string.surv1_title, R.string.surv2_title, R.string.surv3_title
};
private static final int[][] mTextViews = {
{ R.string.surv1_1, R.string.surv1_2, R.string.surv1_3, R.string.surv1_4, R.string.surv1_5 },
{ R.string.surv2_1, R.string.surv2_2, R.string.surv2_3, R.string.surv2_4, R.string.surv2_5, R.string.surv2_6 },
{ R.string.surv3_1, R.string.surv3_2, R.string.surv3_3 }
};
private static final int[][] mImageViews = {
{ R.drawable.surv_pioche, R.drawable.surv_crafting, R.drawable.surv_hache, R.drawable.surv_charbon,
R.drawable.surv_torch, R.drawable.surv_abri },
{ R.drawable.surv_malle, R.drawable.surv_four, R.drawable.surv_pelle, R.drawable.surv_repere,
R.drawable.surv_sand, R.drawable.surv_glass },
{ R.drawable.surv_1, R.drawable.surv_2, R.drawable.surv_3, R.drawable.surv_4,
R.drawable.surv_5, R.drawable.surv_6, R.drawable.surv_7, R.drawable.surv_8 },
};
private static final int[] mNextButtons = {
R.string.surv1_next, R.string.surv2_next, R.string.surv3_next
};
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent i = getIntent();
if (savedInstanceState != null && savedInstanceState.containsKey(KEY_LAYOUT_ID)) {
mLayoutId = savedInstanceState.getInt(KEY_LAYOUT_ID, 0);
} else if (i != null) {
mLayoutId = i.getIntExtra(KEY_LAYOUT_ID, 0);
} else {
mLayoutId = 0;
}
// Layout
//setContentView(mSurvivalLayouts[mLayoutId]);
LinearLayout ll;
ScrollView sv;
TextView tv;
ImageView iv;
Button b;
sv = new ScrollView(this);
sv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
tv = new TextView(this);
tv.setId(R.id.title);
tv.setText(getString(mTitles[mLayoutId]));
ll.addView(tv);
for (final int textId: mTextViews[mLayoutId]) {
tv = new TextView(this);
tv.setText(getString(textId));
ll.addView(tv);
}
for (final int imgId: mImageViews[mLayoutId]) {
L.i("Creating image: "+imgId);
iv = new ImageView(this);
iv.setImageResource(imgId);
ll.addView(iv);
}
b = new Button(this);
b.setText(getString(mNextButtons[mLayoutId]));
b.setId(R.id.survival_next);
ll.addView(b);
sv.addView(ll);
setContentView(sv);
// Title
Util.setTitleFont(this, findViewById(R.id.title));
// "Next" button
final View nextButton = findViewById(R.id.survival_next);
Util.setFont(this, nextButton, "Lobster.ttf");
nextButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
final Intent next = new Intent(SurvivalActivity.this, SurvivalActivity.class);
next.putExtra(KEY_LAYOUT_ID, (mLayoutId + 1) % mSurvivalLayouts.length);
startActivity(next);
finish();
}
});
}
正如你所看到的,我只是直接膨胀的意见,而丽
(这是一个别名 Log.i(TAG,.. 。)
)表示什么是最后ImageView的任何崩溃之前夸大了。
As you can see I am just inflating the views directly, and L.i
(which is an alias to Log.i(TAG, ...)
) indicates what was the last ImageView inflated before any crash.
我跑的应用程序,看到的第一个活动,然后是第二个,并作为previously崩溃,而装载第三个。我在logcat中看到的最后一个ID是最后一张照片 R.drawable.surv_8
。这是一个630x377 JPEG文件,45昆明植物研究所。
I ran the app, saw the 1st activity, then the second, and as previously it crashes while loading the third one. The last ID I saw in the logcat was the last picture R.drawable.surv_8
. This is a 630x377 jpeg file, 45 kiB.
我试图改变这样的看法顺序:
I tried to change the order of the views like this:
private static final int[][] mImageViews = {
{ R.drawable.surv_pioche, R.drawable.surv_crafting, R.drawable.surv_hache, R.drawable.surv_charbon,
R.drawable.surv_torch, R.drawable.surv_abri },
{ R.drawable.surv_malle, R.drawable.surv_four, R.drawable.surv_pelle, R.drawable.surv_repere,
R.drawable.surv_sand, R.drawable.surv_glass },
{ R.drawable.surv_8, R.drawable.surv_1, R.drawable.surv_2, R.drawable.surv_3, R.drawable.surv_4,
R.drawable.surv_5, R.drawable.surv_6, R.drawable.surv_7, },
};
所以这surv_8是第一个。该应用程序仍然崩溃的最后一张照片,这是 R.drawable.surv_7
。所以这不是一个形象问题。
So that surv_8 is first. The app is still crashing at the last picture, which is R.drawable.surv_7
. So that is not an image issue.
然后我删除的图片之一的 mImageViews [2]
让我只有7张图片,而不是8.应用程序工作正常:活动负荷当我按一下按钮我去下一个,并在最后我去的第一个。没有崩溃。
Then I removed one of the pictures out of mImageViews[2]
so that I have only 7 pictures instead of 8. The app is working as expected: the activity loads, when I click the button I go to the next one, and on the last I go to the first. No crash.
我不过告诉大家,活动1和2的逗留到内存中。事实上,看看时序:
I can however tell that the activity 1 and 2 stay into memory. Indeed, have a look at the timings:
03-04 15:47:13.685 I/ActivityManager(17430): Displayed net.bicou.myapp/.SurvivalActivity: +2s570ms
03-04 15:47:36.834 I/ActivityManager(17430): Displayed net.bicou.myapp/.SurvivalActivity: +803ms
03-04 15:47:39.756 I/ActivityManager(17430): Displayed net.bicou.myapp/.SurvivalActivity: +1s476ms
03-04 15:47:44.201 I/ActivityManager(17430): Displayed net.bicou.myapp/.SurvivalActivity: +462ms
03-04 15:47:46.717 I/ActivityManager(17430): Displayed net.bicou.myapp/.SurvivalActivity: +474ms
03-04 15:47:48.599 I/ActivityManager(17430): Displayed net.bicou.myapp/.SurvivalActivity: +474ms
400毫秒,而不是1.5-2.5秒加载活性
400ms instead of 1.5-2.5 sec to load the activity.
这是为什么住到内存?
=> **我是否需要手动自由在的onDestroy所有图片()
? **
=> ** Do I need to manually free all pictures upon onDestroy()
? **
=>您觉得这个做的:<一href="http://androidactivity.word$p$pss.com/2011/09/24/solution-for-outofmemoryerror-bitmap-size-exceeds-vm-budget/" rel="nofollow">http://androidactivity.word$p$pss.com/2011/09/24/solution-for-outofmemoryerror-bitmap-size-exceeds-vm-budget/
有了这个解决方案,我可以加载像10位图全球范围内,我会释放一些在加载另一个活动?
=> What do you think about this: http://androidactivity.wordpress.com/2011/09/24/solution-for-outofmemoryerror-bitmap-size-exceeds-vm-budget/
With this solution I could load like 10 bitmaps globally, and I would free some while loading another activity?
推荐答案
我很抱歉,这个问题的答案是不能够实际有我给我的问题的要素。
I'm sorry that the answer of this question wasn't actually possible to have with the elements I gave in my question.
事实上,正如在其他的问题在这里:为什么我所有的位图上采样200%?,我把我的照片在绘制
文件夹,其中,像我这样的一个xhdpi屏幕上,会导致Android的上采样两遍(匹配xhdpi针对MDPI),并且将导致400%的内存使用情况(两次的宽度和高度的两倍,以便4倍多的像素)。
Indeed, as mentioned in another question here: Why are all my bitmaps upsampled 200%?, I put my pictures in the drawable
folder, which, on a xhdpi screen like mine, will cause Android to upsample everything twice (to match xhdpi against mdpi), and will result in a 400% memory usage (twice the width and twice the height so 4 times as many pixels).
还有一件事,因为我不希望用户能够回去(请参阅完成()
之后的 startActivity ()
),这是我放在的onPause()
:
One more thing, since I don't want the user to be able to go back (see the finish()
right after the startActivity()
), here's what I put in the onPause()
:
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
这是一些code我来到这里的计算器(例如这里:<一href="http://stackoverflow.com/questions/7044770/drawable-vs-single-reusable-bitmap-better-with-memory">Drawable VS单可重复使用的位图的内存比较好?)。
This is some code I got here on StackOverflow (for example here: Drawable vs Single reusable Bitmap better with memory?).
下面是我的话这个code,为什么每一行是很重要的:
Here are my remarks about this code and why every line is important:
- 的
setCallback(空)
删除引用到活动,以便它可以被垃圾收集。如果你不这样做,所有的意见都会留在记忆。 - 您还需要从
的onPause
调用它,因为的onDestroy
不能保证被调用。李> - 您可能需要引起垃圾收集之后,为了帮助GC了解到,一些参考的对象所做的孤儿和可以GC'd。只需拨打
的System.gc()
。
- The
setCallback(null)
removes the reference to the activity, so that it can be garbage collected. If you don't do this, all the views will stay in memory. - You also need to call it from
onPause
, becauseonDestroy
is not guaranteed to be called. - You may need to cause a garbage collection after this, in order to help the GC understand that some references to objects that were made orphans and that can be GC'd. Just call
System.gc()
.
这是得到的的onPause
code,与具有ID的活动的主要布局 top_layout
This is the resulting onPause
code, with the main layout of your activity having the id top_layout
:
@Override
protected void onPause() {
super.onPause();
unbindDrawables(findViewById(R.id.top_layout));
System.gc();
}
这篇关于的OutOfMemoryError装载活动时,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!