首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免android ANR

如何避免android ANR
EN

Stack Overflow用户
提问于 2012-08-17 15:56:27
回答 2查看 1.3K关注 0票数 0

我有一个链接到我的Android应用程序的库,我正在从我的android活动中调用该库的一些函数,这些函数调用非常耗时(4-5秒)。

由于库的限制,我不能在单独的线程中调用这个函数(使用AsyncTaks,thread )。

当我调用这些函数时,当这些函数同时进行时,我的UI不响应用户活动,以避免显示处理屏幕,如果中间用户执行任何关键操作,则会出现ANR错误。

我如何避免这个ANR,或者我没有办法避免它,除了把耗时的进程放在单独的线程中?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-08-17 16:04:43

最好阅读文章和观看谷歌IO视频(比如 one和 one)。

如果你没有时间做这个,只需记住这条简单的规则:

长操作(如互联网操作、数据库操作、IO操作以及任何耗时超过5秒的操作)如果发生在UI线程上,可能会导致ANR值。

要更新UI,必须使用UI线程。如果您需要在长操作之后/期间执行此操作,请使用以下类:HandlerAsyncTaskView.postActivity.runOnUiThread

票数 0
EN

Stack Overflow用户

发布于 2012-08-17 16:13:38

这个库是谁写的?它是什么?我能想到的唯一原因是它会抛出异常,因为它试图从你调用它的线程中更新UI。如果库方法需要4-5秒来竞争,那么它们应该为您提供一个回调机制,以便您可以在UI线程上更新您的UI。

代码语言:javascript
复制
new Thread("Slow native process") {
    public void run() {
        // call your "time taking process", passing in the callback (you could implement in the outer class and pass "this"...)
        callNativeMethod( args, new YourCallbackInterface() {
            public void onResult( String response ) {
                activity.runOnUiThread( new Runnable() {
                    // update UI
                });
            }
        });
    }
 }.start();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12001933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档