0

ksoap2 を使用してサーバーからデータを取得します (私のデータは約 6MB) 私のコード:

                   SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            // envelope.dotNet=true;
            envelope.setOutputSoapObject(request);
            HttpTransportSE androidhttpTranport = new HttpTransportSE(URL,
                    ContantSystem.TimeOut);
            androidhttpTranport.call(SOAP_ACTIONS, envelope);

            Object responseBody = null;
            try {
                responseBody = envelope.getResponse();
            } catch (SoapFault e2) {
                // TODO Auto-generated catch block

            }

データを同期すると、アプリに例外が表示されます:

11-20 17:16:02.271: E/AndroidRuntime(431): FATAL EXCEPTION: Thread-10
11-20 17:16:02.271: E/AndroidRuntime(431): java.lang.OutOfMemoryError
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.kxml2.io.KXmlParser.push(KXmlParser.java:626)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.kxml2.io.KXmlParser.pushEntity(KXmlParser.java:794)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.kxml2.io.KXmlParser.pushText(KXmlParser.java:849)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.kxml2.io.KXmlParser.nextImpl(KXmlParser.java:354)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.kxml2.io.KXmlParser.next(KXmlParser.java:1378)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.kxml2.io.KXmlParser.nextText(KXmlParser.java:1432)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.ksoap2.serialization.DM.readInstance(DM.java:34)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.ksoap2.serialization.SoapSerializationEnvelope.readInstance(SoapSerializationEnvelope.java:462)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:420)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:289)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:422)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:149)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:137)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.ksoap2.transport.Transport.parseResponse(Transport.java:100)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:195)
11-20 17:16:02.271: E/AndroidRuntime(431):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
11-20 17:16:02.271: E/AndroidRuntime(431):  at jp.osaka.APPLIActivity.getMSConditionSupportTime1(APPLIActivity.java:534)
11-20 17:16:02.271: E/AndroidRuntime(431):  at jp.osaka.APPLIActivity.access$2(APPLIActivity.java:517)
11-20 17:16:02.271: E/AndroidRuntime(431):  at jp.osaka.APPLIActivity$myrunable.run(APPLIActivity.java:358)
11-20 17:16:02.271: E/AndroidRuntime(431):  at java.lang.Thread.run(Thread.java:1019)
11-20 17:16:06.960: E/WindowManager(431): Activity jp.osaka.APPLIActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40571980 that was originally added here
11-20 17:16:06.960: E/WindowManager(431): android.view.WindowLeaked: Activity jp.osaka.APPLIActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40571980 that was originally added here
11-20 17:16:06.960: E/WindowManager(431):   at android.view.ViewRoot.<init>(ViewRoot.java:258)
11-20 17:16:06.960: E/WindowManager(431):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
11-20 17:16:06.960: E/WindowManager(431):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
11-20 17:16:06.960: E/WindowManager(431):   at android.view.Window$LocalWindowManager.addView(Window.java:424)
11-20 17:16:06.960: E/WindowManager(431):   at android.app.Dialog.show(Dialog.java:241)
11-20 17:16:06.960: E/WindowManager(431):   at jp.osaka.APPLIActivity.showProccess(APPLIActivity.java:338)
11-20 17:16:06.960: E/WindowManager(431):   at jp.osaka.APPLIActivity.startProgram(APPLIActivity.java:306)
11-20 17:16:06.960: E/WindowManager(431):   at jp.osaka.APPLIActivity.onCreate(APPLIActivity.java:172)
11-20 17:16:06.960: E/WindowManager(431):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-20 17:16:06.960: E/WindowManager(431):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
11-20 17:16:06.960: E/WindowManager(431):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
11-20 17:16:06.960: E/WindowManager(431):   at android.app.ActivityThread.access$1500(ActivityThread.java:117)
11-20 17:16:06.960: E/WindowManager(431):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
11-20 17:16:06.960: E/WindowManager(431):   at android.os.Handler.dispatchMessage(Handler.java:99)
11-20 17:16:06.960: E/WindowManager(431):   at android.os.Looper.loop(Looper.java:123)
11-20 17:16:06.960: E/WindowManager(431):   at android.app.ActivityThread.main(ActivityThread.java:3647)
11-20 17:16:06.960: E/WindowManager(431):   at java.lang.reflect.Method.invokeNative(Native Method)
11-20 17:16:06.960: E/WindowManager(431):   at java.lang.reflect.Method.invoke(Method.java:507)
11-20 17:16:06.960: E/WindowManager(431):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-20 17:16:06.960: E/WindowManager(431):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-20 17:16:06.960: E/WindowManager(431):   at dalvik.system.NativeStart.main(Native Method)

設定後 android:largeHeap="true"、Android 4.0.3 でアプリを実行すると、アプリは問題なく動作します。しかし、Android 2.3でアプリを実行すると、アプリが停止して例外が表示されます:java.lang.OutOfMemoryError なぜですか? もつれを解くと、この問題はどのようになりますか? ありがとう。

4

2 に答える 2

0

これは何のデータですか?

あなたまたはライブラリが単一のブロックでデータを読み取っている可能性がありますが、これは良い考えではない可能性があります。小さなバッファで読み取ってから、ファイルキャッシュに保存してください。

于 2012-11-20T10:47:32.750 に答える
0

ActivityManager.getMemoryClass() と ActivityManager.getLargeMemoryClass() を使用して、より多くのメモリが割り当てられていることを確認できます。試してみてください。

于 2012-11-20T10:47:55.093 に答える