不幸的是,MyApp已停止,我如何解决这个问题?

uqdfh47h  于 2022-09-16  发布在  Java
关注(0)|答案(23)|浏览(325)

我正在开发一个应用程序,每次运行它,我都会得到这样的消息:
不幸的是,MyApp已停止。
我能做什么来解决这个问题?

3z6pesqy

3z6pesqy1#

使用LogCat并尝试查找导致应用程序崩溃的原因。
若要查看Logcat,请使用Android Studio,然后按ALT+6,或
如果使用Eclipse,则窗口->打开透视->其他-LogCat
转到LogCat,从下拉菜单中选择错误。这将包含帮助您调试所需的所有信息。如果这不起作用,请将LogCat作为您问题的编辑发布,有人会帮助您。

unguejic

unguejic2#

如果您的应用程序崩溃**,没有任何错误**,并且您没有使用资产管理器,但加载了如下纹理:

Texture texture = new Texture("myImage.png"); //dont to this all the time

那就是问题所在。我遇到过这种情况。你应该始终使用资产管理器来避免内存过载。

23c0lvtd

23c0lvtd3#

检查Logcat消息。此外,请参阅D1C1D中缺少的元素,如定义ActivityUser permission等。
若要查看Logcat,请使用Android Studio,然后按*alt+6***,或
如果使用
Eclipse**,则窗口->打开透视->其他-LogCat
现在,从下拉菜单中选择错误。

或者,您可以使用ADB tool获取Logcat file来分析问题。

adb logcat > logcat.txt

现在打开logcat.txt文件并搜索应用程序名称。应该有关于失败原因、行号、类名等的信息。

ugmeyewa

ugmeyewa4#

我建议你这样做。
1.检查您的手机是否有足够的空间,应用程序可以运行----Previor/
1.当应用程序崩溃时,检查logcat。它将显示应用程序崩溃的确切位置。
1.检查主线程上是否使用了由于ANR而占用大量内存的东西。

06odsfpq

06odsfpq5#

在终端中运行此命令也有助于查找问题:

gradlew build > log.txt 2>details.txt

然后,您应该转到上面两个日志文件中的gradlew文件位置。

f4t66c6m

f4t66c6m6#

首先,您需要检查应用程序崩溃的位置和原因(Unfortunately, MyApp has stopped.).LOG的帮助下,您可以找出哪里出了问题。
之后,您可以找到应用程序停止的点,并从您的点修复该点。

qpgpyjmq

qpgpyjmq7#

如果您的终端中没有任何有趣的日志(或者它们与您的应用程序没有直接关系),可能您的问题是由于本地库。在这种情况下,您应该检查终端中的“墓碑”文件。
墓碑文件的默认位置取决于每个设备,但如果是这种情况,您将有一个日志,告诉您:Tombstone written to: /data/tombstones/tombstone_06
有关更多信息,请查看https://source.android.com/devices/tech/debug

cqoc49vn

cqoc49vn8#

开发过程中的崩溃

尝试我最喜欢的工具logview,以获取日志并在开发过程中进行分析。
确保在Linux中运行时将./logview./lib/logview.jar标记为可执行文件。
如果你不喜欢,有很多替代品desktop log viewers for Android

在野外坠毁

集成实时崩溃报告工具,如Firebase Crashlytics,以获取用户设备上发生的未处理异常的堆栈跟踪。
阅读How to Release a Buggy App (And Live to Tell the Tale),了解更多关于处理现场错误的信息。

4ngedf3f

4ngedf3f9#

Logcat-用于检查Android Studio开发阶段的日志

最初清除Logcat并让应用程序再次崩溃,这样您只能获得崩溃日志的详细信息。您必须检查堆栈跟踪
不幸的是,MyApp已经停止了一段时间。原因有很多。您可以在日志中检查。为此,您可以使用Log.e(“标记”、“消息”);

应用程序崩溃期间的常见错误如下:

1.编码错误(错误使用关键字)。
1.属性名称不匹配。
1.不支持的插件(可能)。
1.版本不匹配(可能)。
1.AndroidManifest文件中缺少活动。
1.AndroidManifest文件中缺少权限。
1.最常见的NullPointerException。
1.已声明但未定义。

要解决应用程序崩溃错误:

  • 记住以上几点,并仔细阅读。
  • 如果出现错误,您将获得文件名,该文件名也是蓝色的(单击它们并跳转到发生错误的代码)。
q7solyqu

q7solyqu10#

人们会犯错误,编码也是如此。
当发生任何error时,始终使用红色文本检查logcat,但您可以在蓝色文本中找到真正的问题,并在红色文本中加下划线
确保创建新的activity时,始终在AndroidManifest文件中声明activity
如果添加权限,也在AndroidMainifest文件中声明。

rggaifut

rggaifut11#

您还可以单独获得此错误消息,而不需要任何堆栈跟踪或任何其他错误消息。
在这种情况下,您需要确保Android清单配置正确(包括发生在库中的任何清单合并以及来自库的任何活动),并特别注意清单文件中应用程序中显示的第一个活动。

ar5n3qh5

ar5n3qh512#

如果您的应用程序由于某种原因在没有良好的stacktrace的情况下崩溃。尝试从第一行开始调试它,然后逐行调试直到崩溃。然后你会得到答案,哪一行给你带来了麻烦。当然,您可以将其 Package 到try-catch块中,并打印错误输出。

zpf6vheq

zpf6vheq13#

问题

您的应用程序退出,因为抛出了未捕获的RuntimeException
其中最常见的是D1C1D。

如何解决?

每次Android应用程序崩溃(或任何Java应用程序崩溃),都会将Stack trace写入控制台(在本例中为logcat)。此堆栈跟踪包含解决问题的重要信息。

安卓工作室

在窗口底部栏中,单击Logcat按钮。或者,您可以按alt+6。确保在Devices面板中选择了仿真器或设备。接下来,尝试查找堆栈跟踪,以红色显示。logcat中可能记录了很多内容,因此您可能需要滚动一点。找到堆栈跟踪的一个简单方法是清除logcat(使用右侧的回收站),然后让应用程序再次崩溃。

我找到了堆栈跟踪,现在怎么办?

耶!你的问题已经解决一半了。
您只需要通过分析堆栈跟踪来找出导致应用程序崩溃的确切原因。
读取“What is a stack trace, and how can I use it to debug my application errors?”中的堆栈轨迹

我还是不能解决我的问题!

如果您找到了Exception和它发生的线路,但仍然无法确定如何修复它,请毫不犹豫地询问StackOverflow问题。
尽量简洁:发布堆栈跟踪和相关代码(例如,在抛出Exception的行之前的几行)。

uqjltbpv

uqjltbpv14#

让我分享一个基本的Logcat分析,当您遇到强制关闭时(当应用程序停止工作时)。

文件

Android收集/分析日志的基本工具是logcat。
HERE是Android关于logcat的页面
如果您使用android Studio,也可以检查此链接。

捕获

基本上,您可以使用以下命令手动捕获logcat(或者只检查AndroidStudio中的AndroidMonitor窗口):

adb logcat

有很多参数可以添加到命令中,帮助您过滤和显示您想要的消息…这是个人的…我总是使用下面的命令来获取消息时间戳:

adb logcat -v time

您可以将输出重定向到文件,并在文本编辑器中进行分析。

分析

如果你的应用程序崩溃,你会得到如下结果:

07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.khan.abc, PID: 21144
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
     at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
     at android.view.View.performClick(View.java:4848)
     at android.view.View$PerformClick.run(View.java:20262)
     at android.os.Handler.handleCallback(Handler.java:815)
     at android.os.Handler.dispatchMessage(Handler.java:104)
     at android.os.Looper.loop(Looper.java:194)
     at android.app.ActivityThread.main(ActivityThread.java:5631)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9

日志的这部分向您展示了许多信息:

  • 问题发生时:07-09 08:29:13.475

检查问题发生的时间非常重要…您可能会在日志中发现多个错误…您必须确保您正在检查正确的消息:)

  • 哪个应用程序崩溃:com.example.khan.abc

这样,您就知道哪个应用程序崩溃了(确保您正在检查有关消息的日志)

  • 哪个错误:java.lang.NullPointerException

空指针异常错误

  • 有关错误的详细信息:Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

您试图从FragmentActivity对象调用方法onBackPressed()。但是,当您这样做时,该对象是null

  • 堆栈跟踪:堆栈跟踪向您显示方法调用顺序……有时,错误发生在调用方法中(而不是在被调用方法中)。

在com.example.khan.abc.AudioFragment$1.onClick(audiofragragment.java:125)
文件com.example.khan.abc.AudioFragment.java中发生错误,位于onClick()方法中的第125行(stacktrace显示发生错误的行)
它被称为:

at android.view.View.performClick(View.java:4848)

其被称为:

at android.view.View$PerformClick.run(View.java:20262)

其被称为:

at android.os.Handler.handleCallback(Handler.java:815)

概述

这只是一个概述…不是所有的日志都很简单,但错误给出了具体的问题,详细显示了所有的问题…它只是为了分享想法并向您提供入门级信息。。。
我希望我能在某些方面帮助你……问候

omjgkv6w

omjgkv6w15#

在下面的showToast()方法中,您必须为上下文或应用程序上下文传递另一个参数,这样您可以尝试它。

public void showToast(String error, Context applicationContext){
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)      
        findViewById(R.id.toast_root));
        TextView text = (TextView) findViewById(R.id.toast_error);
        text.setText(error);
        Toast toast = new Toast(applicationContext);
        toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(view);
        toast.show();
}

相关问题