Стартиране на дейност от тази дейност след пълно освобождаване на цялата памет, която тази дейност държи

Стартирам дейност Б от дейност А. И искам дейност А да бъде напълно унищожена и цялата памет, която държи, да бъде освободена, така че дейност Б да започне, сякаш започва първа. Имам метод onClick за бутон, който завършва тази дейност и използва метода unbindDrawables, копиран от тук.

//inside activity A

public void onClickMethod(View v){
        Intent intent = new Intent(this, EarthRoomActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);// starting activity B
        unbindDrawables(findViewById(R.id.water_room_flipper));
        this.finish();
}

static void unbindDrawables(View view) {
try{
System.out.println("UNBINDING"+view);
    if (view.getBackground() != null) {
        ((BitmapDrawable)view.getBackground()).getBitmap().recycle();
        view.getBackground().setCallback(null);
        view=null;
    }
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
        unbindDrawables(((ViewGroup) view).getChildAt(i));
        }
    ((ViewGroup) view).removeAllViews();
    }
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}}   

Но въпреки това получавам тази грешка:

10-28 20:20:14    .220: E/AndroidRuntime(22709): FATAL EXCEPTION: main
10-28 20:20:14.220: E/AndroidRuntime(22709):
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.room/com.example.room.EarthRoomActivity}:
android.view.InflateException: Binary XML file line #1: Error
inflating class <unknown> 10-28 20:20:14.220: E/AndroidRuntime(22709):
    at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.app.ActivityThread.access$600(ActivityThread.java:128) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.os.Handler.dispatchMessage(Handler.java:99) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.os.Looper.loop(Looper.java:137) 10-28 20:20:14.220:
E/AndroidRuntime(22709):    at
android.app.ActivityThread.main(ActivityThread.java:4514) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
java.lang.reflect.Method.invokeNative(Native Method) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
java.lang.reflect.Method.invoke(Method.java:511) 10-28 20:20:14.220:
E/AndroidRuntime(22709):    at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
dalvik.system.NativeStart.main(Native Method) 10-28 20:20:14.220:
E/AndroidRuntime(22709): Caused by: android.view.InflateException:
Binary XML file line #1: Error inflating class <unknown> 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.view.LayoutInflater.createView(LayoutInflater.java:606) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.view.LayoutInflater.parseInclude(LayoutInflater.java:800)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.view.LayoutInflater.rInflate(LayoutInflater.java:729) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.view.LayoutInflater.inflate(LayoutInflater.java:489) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.view.LayoutInflater.inflate(LayoutInflater.java:396) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.view.LayoutInflater.inflate(LayoutInflater.java:352) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:280)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.app.Activity.setContentView(Activity.java:1892) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
com.example.room.EarthRoomActivity.onCreate(EarthRoomActivity.java:28)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.app.Activity.performCreate(Activity.java:4562) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
10-28 20:20:14.220: E/AndroidRuntime(22709):    ... 11 more 10-28
20:20:14.220: E/AndroidRuntime(22709): Caused by:
java.lang.reflect.InvocationTargetException 10-28 20:20:14.220:
E/AndroidRuntime(22709):    at
java.lang.reflect.Constructor.constructNative(Native Method) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
java.lang.reflect.Constructor.newInstance(Constructor.java:417) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.view.LayoutInflater.createView(LayoutInflater.java:586) 10-28
20:20:14.220: E/AndroidRuntime(22709):  ... 26 more 10-28
20:20:14.220: E/AndroidRuntime(22709): Caused by:
java.lang.OutOfMemoryError 10-28 20:20:14.220:
E/AndroidRuntime(22709):    at
android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:577)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:775)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.content.res.Resources.loadDrawable(Resources.java:1968) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.content.res.TypedArray.getDrawable(TypedArray.java:601) 10-28
20:20:14.220: E/AndroidRuntime(22709):  at
android.view.View.<init>(View.java:2857) 10-28 20:20:14.220:
E/AndroidRuntime(22709):    at android.view.View.<init>(View.java:2794)
10-28 20:20:14.220: E/AndroidRuntime(22709):    at
android.view.ViewGroup.<init>(ViewGroup.java:381) 10-28 20:20:14.220:
E/AndroidRuntime(22709):    at
android.widget.RelativeLayout.<init>(RelativeLayout.java:174) 10-28
20:20:14.220: E/AndroidRuntime(22709):  ... 29 more

Трябва да спомена, че когато стартирам дейност B от манифеста на Android, което го прави първото стартирано приложение, то се стартира без грешки.

Дейност B xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:layout_width="fill_parent" android:id="@+id/earth_room_layout"
    android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">

    <ViewFlipper android:id="@+id/water_room_flipper"
        android:layout_width="fill_parent" android:layout_height="fill_parent">
        <include layout="@layout/earth_room_wall1" android:id="@+id/first" />
        <include layout="@layout/earth_room_wall2" android:id="@+id/second" />
        <include layout="@layout/earth_room_wall3" android:id="@+id/third" />
        <include layout="@layout/earth_room_wall4" android:id="@+id/fourth" />
    </ViewFlipper>

    <com.example.room.CustomView android:id="@+id/customView"
        android:layout_width="fill_parent" android:layout_height="fill_parent" />
</FrameLayout>

Ако премахна последния от ViewFlipper, той работи. т.е. трябва да направи нещо с грешка OutOfMemory. Но аз пуснах всичко, което дейност А съдържаше, нали? Или може би съм пропуснал нещо?


person Nazerke    schedule 28.10.2013    source източник
comment
android.view.InflateException: Binary XML file line #1: Error Изглежда, че проблемът е във вашия XML, който не сте публикували.   -  person nhgrif    schedule 28.10.2013
comment
Добавих го към редакцията. Моля те, погледни.   -  person Nazerke    schedule 28.10.2013
comment
само като коментар, FrameLayouts не трябва да се използва нормално за съхраняване на повече отколкото един детски изглед.   -  person Jorge Aguilar    schedule 28.10.2013
comment
@Jorge как иначе мога да накарам персонализирания изглед да се показва върху всички оформления, включени във viewflipper?   -  person Nazerke    schedule 28.10.2013
comment
можете да използвате relativelayout и да го поставите отгоре, проверете това отговорете, за да разберете по-добре какво казах.   -  person Jorge Aguilar    schedule 28.10.2013
comment
@JorgeAguilar благодаря ти. защо повече от един дъщерен изглед не трябва да се използва в оформлението на рамката? също така, може ли това да е причина за грешката ми?   -  person Nazerke    schedule 28.10.2013
comment
проверете връзката в първия ми коментар и можете да я видите в документацията, първи ред. Но също така казва, че е възможно да добавите повече от един, така че не мисля, че това е част от вашата грешка, но можете да опитате и да видите какво ще се случи.   -  person Jorge Aguilar    schedule 28.10.2013


Отговори (1)


Изглежда има нещо нередно с оформлението на Дейност B, изглежда грешката е в ред #1, може би сте забравили да добавите

<?xml version="1.0" encoding="utf-8"?>

на върха. Ако публикувате оформлението, мога да ви помогна допълнително.

person Xaver Kapeller    schedule 28.10.2013