使try-catch OutOfMemoryError和printStackTrace()的原因是什么?

mrphzbgm  于 2022-10-22  发布在  Java
关注(0)|答案(1)|浏览(165)

我取消了try-catch语句,这意味着它将尝试一段代码,如果失败,将执行catch部分。我不明白的是,在catch部分使用printStackTrace表示错误。我的意思是,为什么编写以下代码会很有用:

try{

}
catch (OutOfMemoryError e) {
e.printStackTrace();
}

如果try部分中的代码失败,将根据上述代码打印内存不足错误。这是什么原因?如果应用程序崩溃(try函数的代码),Google Play控制台上不会自动打印错误吗?如果Google Play控制台实际上打印了错误的堆栈跟踪,而不需要使用try-catch函数,我不理解打印错误的原因。。。
我不明白为什么使用try-catch的真实代码示例:

public void playMediaPlayer(int id) {
            try {
                if (mediaPlayer != null || mediaPlayer.isPlaying()) {
                    mediaPlayer.release();
                    mediaPlayer = new MediaPlayer();
                }

                if (id == 1) {
                    mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.sound1);
                } else if (id == 2) {
                    mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.sound2);

                }
                if (PreferenceData.getSound(getApplicationContext())) {
                    mediaPlayer.start();
                }
            } catch (OutOfMemoryError e) {
                e.printStackTrace();
            }

        }
hk8txs48

hk8txs481#

没有任何东西会自动转到Google Play控制台,因为它永远不会崩溃。catch将防止异常崩溃并继续运行。这使得这段代码非常危险,除非你知道自己在做什么。通常,只有在使用缓存的代码中才会看到这样的情况,因为失败的分配会导致您将数据踢出缓存并重试。
至于为什么您可能想这样做——出于调试目的。您可能希望在调试时查看它发生的时间和有关分配的信息(例如它有多大)。它只供您个人使用,因为您永远不会看到其他设备的日志。

相关问题