Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序崩溃了一些次,但未处于调试模式_Java_Android - Fatal编程技术网

Java 应用程序崩溃了一些次,但未处于调试模式

Java 应用程序崩溃了一些次,但未处于调试模式,java,android,Java,Android,我遇到了一个奇怪的情况,我的应用程序有时会崩溃(比如在执行了将近20个事务之后),但在调试模式下,即使在模拟器中也不会发生崩溃。 我也增加了我的堆内存 我在此处附加的日志错误: 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

我遇到了一个奇怪的情况,我的应用程序有时会崩溃(比如在执行了将近20个事务之后),但在调试模式下,即使在模拟器中也不会发生崩溃。 我也增加了我的堆内存

我在此处附加的日志错误:

 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)
07-20 11:27:39.207:E/AndroidRuntime(17877):致命异常:main
07-20 11:27:39.207:E/AndroidRuntime(17877):java.lang.OutOfMemoryError
07-20 11:27:39.207:E/AndroidRuntime(17877):位于java.util.ArrayList.toArray(ArrayList.java:492)
07-20 11:27:39.207:E/AndroidRuntime(17877):位于java.util.ArrayList(ArrayList.java:93)
07-20 11:27:39.207:E/AndroidRuntime(17877):位于com.mis.adapter.MicListAdapter.(miclistapter.java:52)
07-20 11:27:39.207:E/AndroidRuntime(17877):位于com.mis.controller.InventoryCount$InflateList.onPostExecute(InventoryCount.java:3061)
07-20 11:27:39.207:E/AndroidRuntime(17877):位于com.mis.controller.InventoryCount$InflateList.onPostExecute(InventoryCount.java:1)
07-20 11:27:39.207:E/AndroidRuntime(17877):在android.os.AsyncTask.finish(AsyncTask.java:631)
07-20 11:27:39.207:E/AndroidRuntime(17877):在android.os.AsyncTask.access$600(AsyncTask.java:177)
07-20 11:27:39.207:E/AndroidRuntime(17877):位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
07-20 11:27:39.207:E/AndroidRuntime(17877):在android.os.Handler.dispatchMessage(Handler.java:99)上
07-20 11:27:39.207:E/AndroidRuntime(17877):在android.os.Looper.loop(Looper.java:137)
07-20 11:27:39.207:E/AndroidRuntime(17877):在android.app.ActivityThread.main(ActivityThread.java:4895)上
07-20 11:27:39.207:E/AndroidRuntime(17877):位于java.lang.reflect.Method.Invokenactive(本机方法)
07-20 11:27:39.207:E/AndroidRuntime(17877):位于java.lang.reflect.Method.invoke(Method.java:511)
07-20 11:27:39.207:E/AndroidRuntime(17877):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
07-20 11:27:39.207:E/AndroidRuntime(17877):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
2007-20 11:27:39.207:E/AndroidRuntime(17877):在dalvik.system.NativeStart.main(本机方法)
这里我附上了我的onPostMethod()

受保护的void onPostExecute(列表lst){
设置消息(“正在膨胀的数据…”);
if(lst.get(lst.size()-1).getResult()包含((“成功”)){
ordList=新的MicListAdapter(InventoryCount.this,lst);
setAdapter(ordList);
dialog.dismise();
}否则{
dialog.dismise();
toast text.setText(“加载项目时出现问题”);
Toast Toast=新Toast(getApplicationContext());
toast.setGravity(重心垂直,0410);
toast.setDuration(toast.LENGTH\u LONG);
toast.setView(toastLayout);
toast.show();
}
}

不要在
onPostExecute()
方法中再次重新创建适配器。而是在
onCreate()
方法中创建一次适配器,并在
onPostExecute()
方法中使用
adapter.notifyDatasetChanged()
。像这样的,

List<MIC_OrderDetails> list = new ArrayList<MIC_OrderDetails>();
将数据集
list
创建为类变量,并在
onCreate()之前进行初始化,如下所示:

List<MIC_OrderDetails> list = new ArrayList<MIC_OrderDetails>();
在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();
    }
}
受保护的void onPostExecute(列表lst){
设置消息(“正在膨胀的数据…”);
if(lst.get(lst.size()-1).getResult()包含((“成功”)){
list.clear();
列表。添加所有(lst);
adapter.notifyDataSetChanged();
dialog.dismise();
}否则{
dialog.dismise();
toast text.setText(“加载项目时出现问题”);
Toast Toast=新Toast(getApplicationContext());
toast.setGravity(重心垂直,0410);
toast.setDuration(toast.LENGTH\u LONG);
toast.setView(toastLayout);
toast.show();
}
}

如果您必须处理大量数据,请添加
android:largeHeap=“true”
在AndroidManifest.xml中。

每次应用程序进入此屏幕时,我都会从数据库中获取数据并在Listview中进行膨胀。这样,如果数据很大,它就不会妨碍主UI线程。因此,我已使用OnPostExecute方法创建了adpter。如果我在任何地方出错,请纠正我。@K Nerraj Lal我尝试了您的方法已通知但仍存在内存不足的问题..知道吗?@PraneshSahu崩溃日志是否仍然相同?请更新代码。我通过在自定义对话框中调用finish()解决了这个问题,但遇到了一个新问题,即我的Listview无法刷新@K Neeraj Lalcan您可以显示适配器吗?如果您的数据很大,请不要将所有内容加载到内存中。为什么不使用“加载更多”按钮成批加载数据呢。我不确定您拥有的数据的大小,但这通常是加载大量数据时的最佳实践。您有明显的错误java.lang.OutOfMemoryError。因此,您需要编写耗尽堆内存的代码。问题可能是MemoryLeak,但若你们说在调试模式下是可以的。。。我希望您的垃圾收集器不能像耗尽内存那样快速分配新内存(或者堆已达到最大值)。。。指向配置问题。无论如何,您应该减少创建对象(重用旧对象)并尽快抛出不需要的对象(设置为null)
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();
    }
}