2012-06-13 2 views
0

그래서 소프트웨어의 조각을 쓰고 있어요 내가 두 번째 당김을 만들려고 할 때 충돌 유지합니다. 프론트 스크린에서 시작한 다음 버튼을 누르고 새로운 활동으로 이동합니다. 그 활동에 나는 중간에 ImageView가 있고 바닥에는 버튼이 있습니다. 활동이로드 될 때 ImageView에 드로어 블이 있습니다. 그래서 아래쪽에있는 버튼을 클릭하면 ImageView에있는 드로어 블을 변경해야하지만 충돌이 발생합니다. 이 충돌 할 때 로그 캣의 말씀 여기변경 당김은 안드로이드 응용 프로그램을 충돌

package com.foocity.android.gui; 

import android.app.Activity; 
import android.graphics.Canvas; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageView; 

public class NewMapActivity extends Activity 
{ 
    public ImageView mapPreview; 
    public Drawable  currentPic; 

    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.newmap); 

     currentPic = getResources().getDrawable(R.drawable.milestone_cleanenergy); 
     mapPreview = (ImageView) findViewById(R.id.chooseCanvas); 
     mapPreview.setImageDrawable(currentPic); 
    } 

    public void changePic(View view) 
    { 
     System.out.println("tester boy!!!!!!!!!!!"); 

     currentPic = null; 
     currentPic = getResources().getDrawable(R.drawable.welcomescreen); 
     mapPreview.setImageDrawable(currentPic); 
    } 
} 

그리고 : 그래서 여기

E/AndroidRuntime(1385): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

그 활동에서 내 코드입니다 : 내가 좋아하는 일을 말하는 로그 캣의 오류를 발견

06-13 21:25:56.613: D/dalvikvm(4086): GC_EXTERNAL_ALLOC freed 614 objects/50072 bytes in 58ms 
06-13 21:26:02.133: W/System.err(4086): java.io.FileNotFoundException: /sdcard/000.txt (No such file or directory) 
06-13 21:26:02.143: W/System.err(4086):  at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method) 
06-13 21:26:02.143: W/System.err(4086):  at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152) 
06-13 21:26:02.143: W/System.err(4086):  at java.io.FileInputStream.<init>(FileInputStream.java:82) 
06-13 21:26:02.143: W/System.err(4086):  at java.util.Scanner.<init>(Scanner.java:188) 
06-13 21:26:02.143: W/System.err(4086):  at java.util.Scanner.<init>(Scanner.java:167) 
06-13 21:26:02.143: W/System.err(4086):  at com.foocity.android.Map.<init>(Map.java:33) 
06-13 21:26:02.143: W/System.err(4086):  at com.foocity.android.FooCity.setMap(FooCity.java:594) 
06-13 21:26:02.143: W/System.err(4086):  at com.foocity.android.gui.StartActivity.chooseMap(StartActivity.java:33) 
06-13 21:26:02.153: W/System.err(4086):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-13 21:26:02.153: W/System.err(4086):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-13 21:26:02.153: W/System.err(4086):  at android.view.View$1.onClick(View.java:2067) 
06-13 21:26:02.153: W/System.err(4086):  at android.view.View.performClick(View.java:2408) 
06-13 21:26:02.153: W/System.err(4086):  at android.view.View$PerformClick.run(View.java:8816) 
06-13 21:26:02.153: W/System.err(4086):  at android.os.Handler.handleCallback(Handler.java:587) 
06-13 21:26:02.153: W/System.err(4086):  at android.os.Handler.dispatchMessage(Handler.java:92) 
06-13 21:26:02.153: W/System.err(4086):  at android.os.Looper.loop(Looper.java:123) 
06-13 21:26:02.153: W/System.err(4086):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
06-13 21:26:02.153: W/System.err(4086):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-13 21:26:02.153: W/System.err(4086):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-13 21:26:02.153: W/System.err(4086):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
06-13 21:26:02.153: W/System.err(4086):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
06-13 21:26:02.153: W/System.err(4086):  at dalvik.system.NativeStart.main(Native Method) 
06-13 21:26:02.393: D/dalvikvm(4086): GC_EXTERNAL_ALLOC freed 3101 objects/159528 bytes in 53ms 
06-13 21:26:07.113: I/System.out(4086): tester boy!!!!!!!!!!! 
06-13 21:26:07.123: E/dalvikvm-heap(4086): 9469350-byte external allocation too large for this process. 
06-13 21:26:07.123: E/GraphicsJNI(4086): VM won't let us allocate 9469350 bytes 
06-13 21:26:07.133: D/AndroidRuntime(4086): Shutting down VM 
06-13 21:26:07.133: W/dalvikvm(4086): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
06-13 21:26:07.143: E/AndroidRuntime(4086): FATAL EXCEPTION: main 
06-13 21:26:07.143: E/AndroidRuntime(4086): java.lang.IllegalStateException: Could not execute method of the activity 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.view.View$1.onClick(View.java:2072) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.view.View.performClick(View.java:2408) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.view.View$PerformClick.run(View.java:8816) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.os.Handler.handleCallback(Handler.java:587) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.os.Handler.dispatchMessage(Handler.java:92) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.os.Looper.loop(Looper.java:123) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at dalvik.system.NativeStart.main(Native Method) 
06-13 21:26:07.143: E/AndroidRuntime(4086): Caused by: java.lang.reflect.InvocationTargetException 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at com.foocity.android.gui.NewMapActivity.changePic(NewMapActivity.java:30) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.view.View$1.onClick(View.java:2067) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  ... 11 more 
06-13 21:26:07.143: E/AndroidRuntime(4086): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.graphics.Bitmap.nativeCreate(Native Method) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.graphics.Bitmap.createBitmap(Bitmap.java:468) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.graphics.Bitmap.createBitmap(Bitmap.java:435) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.content.res.Resources.loadDrawable(Resources.java:1709) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  at android.content.res.Resources.getDrawable(Resources.java:581) 
06-13 21:26:07.143: E/AndroidRuntime(4086):  ... 15 more 

분명히 메모리 관리와 관련이 있습니다. Java로 모니터링하는 데 사용하지는 않지만 분명히해야 할 일은 아닙니다. 어떤 도움을 주시면 감사하겠습니다. 감사합니다

추신 나는이 파일을 게시하면서 파일 객체를 만든 다음 System.out에 내용을 쓰려고 시도했다는 것을 알았고 새로운 액티비티가 ImageView에 첫 번째 드로어 블을로드하기 전에도 동일한 오류가 발생하여 모든 작업을 수행해야합니다. 메모리 관리와 함께, 나는이 시스템에서 메모리를 관리하는 방법에 대한 도움이 필요하다고 생각한다. GC가 일반 자바에서 처리하는 데 익숙하기 때문이다. 마음에 오는

답변

1
Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

표시하려는 이미지가 너무 큽니다. 이미지의 크기를 줄이고보십시오.

0

우선 당신이 다른 통해 하나 개의 이미지를 그리기 위해 노력하고, 그리고 앱이 결과로 메모리가 실행되고 있다는 것입니다. 방법을 잘 모르겠지만 다음 이미지를 그리기 전에 ImageView를 지우십시오.

편집 : 당신이 당신의 문제를 해결하는 데 도움이해야 Displaying Bitmaps efficiently .

+0

이 그 것이다. 또한 실행할 때 : currentPic = null; 그런 다음 currentPic = getResources(). getDrawable (R.drawable.blah); 디버그 세션을 사용하면 mapPreview.setImageDrawable (currentPic)을 실행하기 전에 메모리 할당에 대한 오류를 표시합니다. 그래서 그것은 메모리 관리와 관련이 있지만 ImageView에 또 다른 사진을 올려 놓는 구체적인 아이디어가 아닙니다. –

+0

그렇다면 이미지가 너무 큽니다. 그리고 내가 아는 한, 응용 프로그램에 할당 된 메모리 양을 늘릴 방법이 없습니다. – cDecker32

0

06-13 21 : 26 : 07.123 : E/dalvikvm-heap (4086) : 9469350 바이트의 외부 할당이이 프로세스에 비해 너무 큽니다. 06-13 21 : 26 : 07.123 : E는/GraphicsJNI (4086)은 : VM은 ~ (그 비트 맵이 소요 저희가이 말은 R.drawable.welcomescreen으로 사용하는 이미지 리소스를 알려줍니다 너무 큰 9,469,350 바이트

를 할당하지 않습니다 9 메가 바이트). 나는 강력하게 이미지 리소스를 "드로어 블"폴더에 넣기 전에 축소 할 수 있다고 믿는다. 그래서 많은 메모리를 차지하지 않는다.

+0

그래서, 그것은 실제로 문제가 아닙니다. 사진은 실제로 크기가 합쳐진 350kB에 불과했지만 해결했습니다. 그래서 첫 번째 활동 (두 번째 버튼을 누르기 위해 버튼을 누를 때)도 그 위에 그림이 있지만, 나는 다르게 설정했습니다. 두 번째로했던 것처럼, 안드로이드 : src = "@ drawable/blah.jpg"를 사용하여 xml에 설정 한 첫 번째 활동에 대한 것입니다. xml에서 해당 줄을 제거하고 두 번째 활동 ImageView에서했던 것처럼 첫 번째 활동에서 그림을 설정하면 모든 것이 잘 동작합니다. 내 질문은 지금 왜 그 일을 했는가? –

0

내가 안드로이드를 사용하는 XML에서 설정 한 첫번째 활동에 이미지 뷰 : = "@ 드로어 블/blah.jpg"대신 내가 두 번째 시간처럼하는 방법에 SRC. xml에서 해당 줄을 제거하고 두 번째 활동 ImageView에서했던 것처럼 첫 번째 활동에서 그림을 설정하면 모든 것이 잘 동작합니다. 이제 문제는 왜 작동합니까? 왜 XML에서 그림을 설정하는 것이 훨씬 많은 메모리 공간을 차지합니까? 내가 마지막에 말한대로 나는 File 객체를 생성하고 심지어 이미지 뷰에 도달하기 전에 프로그램이 충돌 할 System.out에 그것을 쓸 때 나는 그렇게 생각하지 않는다

+0

그래서 저는 지금 정말로 혼란 스럽습니다. 나는 그걸 가지고 노는 중이었고 두 가지 방법으로 일하고 있습니다. 나는 그것이 내가 바뀐 것이라고 생각하지만 누가 그 문제인지를 압니다. 그러나 결국 그것은 현재 잘 작동하고 있습니다. 앞으로 어떤 일이 일어날 지 기다리고 기다려야 할 것입니다. –

관련 문제