jjzjj

java - 在 Android 操作系统上捕获未处理的 JAVA 运行时异常的最佳实践?

coder 2023-12-20 原文

在 android 上的 e3roid 场景填充过程中,我一直遇到异常,我想完全捕获这些异常。或许我需要创建一个我可以在闲暇时横向浏览的后台异常跟踪器,而不是直接对话会影响用户体验。

W/dalvikvm( 9540): threadid=1: thread exiting with uncaught exception (group=0x2
aac87c8)
E/AndroidRuntime( 9540): FATAL EXCEPTION: main
E/AndroidRuntime( 9540): java.util.ConcurrentModificationException
E/AndroidRuntime( 9540):        at java.util.ArrayList$ArrayListIterator.next(Ar
rayList.java:573)

整个应用程序死于异常对话。我希望能够从全局范围内捕获 ConcurrentModificationException,这样如果由于未知情况发生此类事件,整个应用程序就不会被处置。

** 编辑 **

在此 block 中,在 onSceneTouchEvent 期间被触发

try {


        postUpdate(new AddShapeImpl(scene, onX, onY));

    } finally {

    }

我觉得我开火的速度太快了。我需要放慢速度。

* 跟进 *

我似乎解决了问题..我做了其中一个...

if (    ballspawning == false)

                    try {
                        Log.v(DEBUG_TAG, "onSceneTouchEvent 1-1");  


                        addnewball(scene, onX, onY);



                        Log.v(DEBUG_TAG, "onSceneTouchEvent 1-2");
                    } finally {


                    }

你会看到,在我放入一个 ballspawning boolean 标志和一个辅助过程之后,我传递了我的生成值是多么的黄金......我把它变成了一个字段,它在我的迭代结束时被设置并在列表的横向发生了..哇哦!!太贴心了!

没有真正需要全局陷阱.. 只是很好的旧调试。但我仍然很想实现所有错误的全局处理程序。 待办事项

我又出现并发错误了。。

截图

Debug Msgs

Another Occurrence

screen shot 4

almost narrowing down culprit

我试图用

捕获 ConcurrentModificationException
 void uncaughtException(Thread t,
            Throwable e){

     Log.v(DEBUG_TAG, "uncaughtException **********");
     Log.v(DEBUG_TAG,"thread " + t + "    Throwable" +  e.toString());      
    }

如您在上一个屏幕截图中所见,上述方法从未被调用。

ConcurrentModificationException 使应用程序崩溃并出现异常对话框。

**跟进**

我已经添加了

public class LauncherActivity extends E3Activity implements UncaughtExceptionHandler ,FPSListener,SceneUpdateListener 

并且在运行时额外的未实现方法

@Override
public void uncaughtException(Thread t,Throwable e) {   

    Log.v(DEBUG_TAG, "uncaughtException **************");
     Log.v(DEBUG_TAG,"thread " + t + "    Throwable" +  e.toString());  


}

仍然没有异常捕获...<​​>

我也加了

newThread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){

            @Override
            public void uncaughtException(Thread t, Throwable e) {

                Log.v(DEBUG_TAG,"***************   ERROR! An exception occurred in " + t.getName() + ". Cause: " + e.getMessage());
            }
            });

        newThread.start();

而且还是没有陷阱...

啊啊啊

呼呼!!

刚捕捉到异常!!查看屏幕截图...您将看到 !!!!!

http://img17.imageshack.us/img17/135/concurrentmodificatione.png

Caught Exception

感谢所有让我努力深入了解 Java 异常处理的一切!!

Excellent Resource

我通过以下方式解决了并发问题

删除...

公共(public)类 LauncherActivity 扩展 E3Activity 实现 UncaughtExceptionHandler ,FPSListener,SceneUpdateListener

我必须原创......没有 UncaughtExceptionHandler 实现

并添加了一个由 Johnny Lee 详细介绍的类。 blog.dimond.de/?p=63

真的很甜。

最佳答案

使用Thread.setUncaughtExceptionHandler :

它需要一个 Thread.UncaughtExceptionHandler作为一个方法的接口(interface)的参数:uncaughtException(Thread t, Throwable e) .

来自文档:

Set the handler invoked when this thread abruptly terminates due to an uncaught exception.

不用说,您显然最好从源头修复异常。 ;-) 然而,我确实使用这个结构来发送错误报告,以防出现不可预见的错误。

关于java - 在 Android 操作系统上捕获未处理的 JAVA 运行时异常的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6223430/

有关java - 在 Android 操作系统上捕获未处理的 JAVA 运行时异常的最佳实践?的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  4. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  5. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  6. ruby - 在 Ruby 中重新分配常量时抛出异常? - 2

    我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案

  7. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  8. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  9. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  10. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

随机推荐