2016-03-21 3 views
0

Я пытаюсь начать деятельность с другой деятельностью через:OutOfMemoryError над запуском новой деятельности

Intent loginActivity = new Intent(mainAppContext,LoginActivity.class); 
loginActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
loginActivity.putExtra("Message", mainAppContext.getResources().getString(R.string.RegisteringUserAPIFailure)); 
mainAppContext.startActivity(loginActivity); 

Новый формат деятельности имеет только два изображения одного ImageView из 7KB и другой ImageButton из 11Kb это все. Который не должен генерировать OutOfMemoryError?

Но это порождает следующую ошибку:

03-21 21:20:14.318 20567-20567/com.administrator.myproject E/art: Throwing OutOfMemoryError "Failed to allocate a 108000012 byte allocation with 9062644 free bytes and 8MB until OOM" 
03-21 21:20:14.383 20567-20567/com.administrator.myproject E/art: Throwing OutOfMemoryError "Failed to allocate a 108000012 byte allocation with 9062596 free bytes and 8MB until OOM" 
03-21 21:20:14.423 20567-20567/com.administrator.myproject E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.administrator.myproject, PID: 20567 
                      java.lang.OutOfMemoryError: Failed to allocate a 108000012 byte allocation with 9062596 free bytes and 8MB until OOM 
    at dalvik.system.VMRuntime.newNonMovableArray(Native Method) 
    at android.graphics.Bitmap.nativeCreate(Native Method) 
    at android.graphics.Bitmap.createBitmap(Bitmap.java:942) 
    at android.graphics.Bitmap.createBitmap(Bitmap.java:913) 
    at android.graphics.Bitmap.createBitmap(Bitmap.java:880) 
    at android.graphics.drawable.VectorDrawable$VectorDrawableState.createCachedBitmapIfNeeded(VectorDrawable.java:713) 
    at android.graphics.drawable.VectorDrawable.draw(VectorDrawable.java:280) 
    at android.widget.ImageView.onDraw(ImageView.java:1197) 
    at android.view.View.draw(View.java:16536) 
    at android.view.View.updateDisplayListIfDirty(View.java:15466) 
    at android.view.View.getDisplayList(View.java:15488) 
    at android.view.View.draw(View.java:16258) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3713) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506) 
    at android.view.View.draw(View.java:16539) 
    at android.view.View.updateDisplayListIfDirty(View.java:15466) 
    at android.view.View.getDisplayList(View.java:15488) 
    at android.view.View.draw(View.java:16258) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3713) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506) 
    at android.view.View.draw(View.java:16539) 
    at android.view.View.updateDisplayListIfDirty(View.java:15466) 
    at android.view.View.getDisplayList(View.java:15488) 
    at android.view.View.draw(View.java:16258) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3713) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506) 
    at android.view.View.updateDisplayListIfDirty(View.java:15461) 
    at android.view.View.getDisplayList(View.java:15488) 
    at android.view.View.draw(View.java:16258) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3713) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506) 
    at android.view.View.updateDisplayListIfDirty(View.java:15461) 
    at android.view.View.getDisplayList(View.java:15488) 
    at android.view.View.draw(View.java:16258) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3713) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506) 
    at android.view.View.updateDisplayListIfDirty(View.java:15461) 
    at android.view.View.getDisplayList(View.java:15488) 
    at android.view.View.draw(View.java:16258) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3713) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506) 
    at android.view.View.updateDisplayListIfDirty(View.java:15461) 
    at android.view.View.getDisplayList(View.java:15488) 
    at android.view.View.draw(View.java:16258) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3713) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3506) 
    at android.view.View.draw(View.java:16539) 
    at android.widget.FrameLayout.draw(FrameLayout.java:598) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:3111) 
    at android.view.View.updateDisplayListIfDirty(View.java:15466) 
    at android.view.View.getDisplayList(View.java:15488) 
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:309) 
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:315) 
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:354) 
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2942) 
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2739) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2325) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1301) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7021) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:590) 
    at android.view.Choreographer.doFrame(Choreographer.java:560) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763) 
    at android.os.Handler.handleCallback(Handler.java:739) 
                       at a 

-

<ImageView 
      android:id="@+id/imageView1" 
      android:layout_width="@dimen/dimen_8" 
      android:layout_height="@dimen/dimen_8" 
      android:layout_below="@+id/login_progress" 
      android:layout_centerHorizontal="true" 
      android:layout_gravity="center_horizontal" 
      android:src="@drawable/application_logo_color" /> 

     <ImageButton 
      android:id="@+id/gplus_sign_in_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_gravity="center_horizontal" 
      android:layout_marginTop="@dimen/margin_1" 
      android:background="@color/transparent" 
      android:elevation="8dp" 
      android:src="@drawable/google_plus_sign_in_button" /> 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    ImageButton gPlusSignInButton = (ImageButton) findViewById(R.id.gplus_sign_in_button); 
    SnackBarView = (View) gPlusSignInButton; 
    gPlusSignInButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(SnackBarView, getResources().getString(R.string.SendingGoogleSignIn), Snackbar.LENGTH_INDEFINITE).setAction("Action", null).show(); 
      googlePlusSignIn(); 
     } 
    }); 

    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     String message = extras.getString("Message"); 
     Snackbar.make(SnackBarView, message, Snackbar.LENGTH_INDEFINITE).setAction("Action", null).show(); 
    } 
} 

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
     android:width="2500dp" 
     android:height="1200dp" 
     android:viewportWidth="2500.0" 
     android:viewportHeight="1200.0"> 

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
     android:width="@dimen/dimen_8" 
     android:height="51dp" 
     android:viewportWidth="346.0" 
     android:viewportHeight="72.0"> 
+0

«Новый формат деятельности имеет только два изображения одного ImageView из 7KB и другой ImageButton из 11kb, вот и все »- некоторые« ImageView »отображают« VectorDrawable ». Размер «ImageView» кажется огромным (эквивалент 5196 пикселей на стороне) в зависимости от размера выделения для растрового изображения, которое должно быть сгенерировано для «VectorDrawable». – CommonsWare

+0

Не могли бы вы показать нам код метода onCreate новой активности? –

+0

Оба являются чертежами, я также добавил разметку выше. – Maven

ответ

2

Похоже, вы используете векторные чертежи.

убедитесь, что у них есть разумный характеристическую установить размер (ширина и высота)

например:

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:viewportWidth="512" android:viewportHeight="512" 
    android:width="64dp" android:height="64dp"> 

если вы установили размеры слишком велики, они будут бросать об отсутствии ошибок памяти, когда система пытается отобразить их, поскольку сначала попытается создать их с установленным вами размером.

+0

Оба являются drawables, я также добавил разметку макета выше. – Maven

+0

как я уже сказал, проверьте размер векторных чертежей. (Не макет, который их содержит) – Kuffs

+0

Я также добавил векторный код, они немного большие, но я не настолько большой, чтобы их не хватать, потому что изображения являются не очень сложными, а скорее двумя цветными изображениями, простыми путями. – Maven

-1

Просто добавьте высокую HeapSize, большинство приложений не работают с кучей по умолчанию, в приложении/buid.gradle добавить:

android { 
    ... 
    dexOptions { 
     javaMaxHeapSize "8g" 
     incremental true 
    } 
    ... 
} 
Смежные вопросы