我有一个奇怪的情况,我的应用程序有时会崩溃(比如在执行了将近 20 个事务之后),但在 Debug模式下它没有发生,即使在模拟器中也没有发生崩溃。 我也增加了堆内存。
我在这里附加的日志错误:
07-20 11:27:39.207: E/AndroidRuntime(17877): FATAL EXCEPTION: main
07-20 11:27:39.207: E/AndroidRuntime(17877): java.lang.OutOfMemoryError
07-20 11:27:39.207: E/AndroidRuntime(17877): at java.util.ArrayList.toArray(ArrayList.java:492)
07-20 11:27:39.207: E/AndroidRuntime(17877): at java.util.ArrayList.<init>(ArrayList.java:93)
07-20 11:27:39.207: E/AndroidRuntime(17877): at com.mis.adapter.MicListAdapter.<init>(MicListAdapter.java:52)
07-20 11:27:39.207: E/AndroidRuntime(17877): at com.mis.controller.InventoryCount$InflateList.onPostExecute(InventoryCount.java:3061)
07-20 11:27:39.207: E/AndroidRuntime(17877): at com.mis.controller.InventoryCount$InflateList.onPostExecute(InventoryCount.java:1)
07-20 11:27:39.207: E/AndroidRuntime(17877): at android.os.AsyncTask.finish(AsyncTask.java:631)
07-20 11:27:39.207: E/AndroidRuntime(17877): at android.os.AsyncTask.access$600(AsyncTask.java:177)
07-20 11:27:39.207: E/AndroidRuntime(17877): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
07-20 11:27:39.207: E/AndroidRuntime(17877): at android.os.Handler.dispatchMessage(Handler.java:99)
07-20 11:27:39.207: E/AndroidRuntime(17877): at android.os.Looper.loop(Looper.java:137)
07-20 11:27:39.207: E/AndroidRuntime(17877): at android.app.ActivityThread.main(ActivityThread.java:4895)
07-20 11:27:39.207: E/AndroidRuntime(17877): at java.lang.reflect.Method.invokeNative(Native Method)
07-20 11:27:39.207: E/AndroidRuntime(17877): at java.lang.reflect.Method.invoke(Method.java:511)
07-20 11:27:39.207: E/AndroidRuntime(17877): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
07-20 11:27:39.207: E/AndroidRuntime(17877): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
07-20 11:27:39.207: E/AndroidRuntime(17877): at dalvik.system.NativeStart.main(Native Method)
这里附上我的onPostMethod()
protected void onPostExecute(List<MIC_OrderDetails> lst) {
dialog.setMessage("Inflating Data...");
if (lst.get(lst.size() - 1).getResult().contains(("success"))) {
ordList = new MicListAdapter(InventoryCount.this, lst);
lstView.setAdapter(ordList);
dialog.dismiss();
} else {
dialog.dismiss();
toastText.setText("Problem in loading Items");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 410);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(toastLayout);
toast.show();
}
}
最佳答案
不要在 onPostExecute()
方法中再次重新创建适配器。而是在 onCreate()
方法中创建一次适配器,并在 onPostExecute()
方法中使用 adapter.notifyDatasetChanged()
。像这样,
创建你的数据集 list
作为类变量并在 onCreate()
之前初始化它,就像这样,
List<MIC_OrderDetails> list = new ArrayList<MIC_OrderDetails>();
在 onCreate 方法中初始化适配器,
adapter = new MicListAdapter(InventoryCount.this, list);
lstView.setAdapter(adapter);
在 onPostExecute 方法中,
protected void onPostExecute(List<MIC_OrderDetails> lst) {
dialog.setMessage("Inflating Data...");
if (lst.get(lst.size() - 1).getResult().contains(("success"))) {
list.clear();
list.addAll(lst);
adapter.notifyDataSetChanged();
dialog.dismiss();
} else {
dialog.dismiss();
toastText.setText("Problem in loading Items");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 410);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(toastLayout);
toast.show();
}
}
关于java - 应用程序崩溃了几次但不是在 Debug模式下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38343724/