Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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
Android 调试低内存崩溃(线程相关?)_Android_Crash - Fatal编程技术网

Android 调试低内存崩溃(线程相关?)

Android 调试低内存崩溃(线程相关?),android,crash,Android,Crash,我正试图调试我的Android应用程序的一个神秘崩溃,它似乎发生在内存不足的情况下。有关应用程序的来源,请访问。该应用程序的包是cz.jirkovsky.lukas.chmupocasi 发生的情况是,当手机内存开始不足时,我试图从最近的应用程序列表(长按Home按钮后显示的应用程序)中重新打开应用程序,应用程序崩溃 我曾尝试使用Android Studio调试该应用程序,但该应用程序总是在遇到主活动的onCreate()和onStart()中的任何断点之前崩溃,从而无法进行调试。更糟糕的是,即

我正试图调试我的Android应用程序的一个神秘崩溃,它似乎发生在内存不足的情况下。有关应用程序的来源,请访问。该应用程序的包是cz.jirkovsky.lukas.chmupocasi

发生的情况是,当手机内存开始不足时,我试图从最近的应用程序列表(长按Home按钮后显示的应用程序)中重新打开应用程序,应用程序崩溃

我曾尝试使用Android Studio调试该应用程序,但该应用程序总是在遇到主活动的onCreate()和onStart()中的任何断点之前崩溃,从而无法进行调试。更糟糕的是,即使logcat也不包含任何信息,应用程序崩溃时显示的唯一相关行是:

I/ActivityManager(  428): Displayed cz.jirkovsky.lukas.chmupocasi/.MainActivity: +1s45ms (total +23m23s835ms)
完整的日志可以在,以防我遗漏了什么

最后,我尝试在应用程序崩溃后将调试器附加到应用程序上,此时显示Android的对话框“不幸的是,应用程序已停止”。我没有看到我的任何代码在任何线程中运行。以下是“导出线程”包含的内容:


有没有关于如何调试此类崩溃或如何获取更多信息的想法?

我终于找到了解决方案。这实际上是两个不同的问题

第一个问题是,我的设备(华为Y300)没有记录任何可以使用logcat检索的堆栈跟踪。这很可能是因为我今天早些时候重新启动了,或者,不太可能是因为我尝试通过
android.util.Log
记录一些调试信息

第二个是坠机事件本身。从崩溃中获取堆栈跟踪后,问题很容易解决。尽管我之前使用调试器获得的信息指出线程存在一些问题,但真正的原因是以下异常:

android.app.Fragment$InstantiationException: Unable to instantiate fragment cz.jirkovsky.lukas.chmupocasi.RetainFragment: make sure class name exists, is public, and has an empty constructor that is public
真正的原因是,
RetainFragment
是包私有的。但是,从
片段继承的所有类必须是公共类或公共静态内部类

如果它们不是,它可能会咬你很厉害。原因是,即使在类是包私有的情况下它似乎工作得很好,但在销毁
片段后重新创建
片段以在内存不足的情况下回收一些内存时,它也会失败


最后的寓意是,你不应该总是听IDE说什么,因为在Android Studio告诉我可以将这个片段类设置为包私有后,我引入了这个bug。

我终于找到了解决方案。这实际上是两个不同的问题

第一个问题是,我的设备(华为Y300)没有记录任何可以使用logcat检索的堆栈跟踪。这很可能是因为我今天早些时候重新启动了,或者,不太可能是因为我尝试通过
android.util.Log
记录一些调试信息

第二个是坠机事件本身。从崩溃中获取堆栈跟踪后,问题很容易解决。尽管我之前使用调试器获得的信息指出线程存在一些问题,但真正的原因是以下异常:

android.app.Fragment$InstantiationException: Unable to instantiate fragment cz.jirkovsky.lukas.chmupocasi.RetainFragment: make sure class name exists, is public, and has an empty constructor that is public
真正的原因是,
RetainFragment
是包私有的。但是,从
片段继承的所有类必须是公共类或公共静态内部类

如果它们不是,它可能会咬你很厉害。原因是,即使在类是包私有的情况下它似乎工作得很好,但在销毁
片段后重新创建
片段以在内存不足的情况下回收一些内存时,它也会失败

最后的寓意是,你不应该总是听IDE说什么,因为在Android Studio告诉我这个片段类可以被包私有化之后,我引入了这个bug

android.app.Fragment$InstantiationException: Unable to instantiate fragment cz.jirkovsky.lukas.chmupocasi.RetainFragment: make sure class name exists, is public, and has an empty constructor that is public