我有一个链接到我的 Android 应用程序的库,我正在从我的 android 活动中调用该库的一些函数,这些函数调用需要时间(4-5 秒)。
由于库的限制,我不能在单独的线程(使用 AsyncTaks、线程)中调用此函数。
当我调用这些函数并且这些函数同时在处理中时,我的 UI 不会响应用户活动并避免我正在显示处理屏幕,并且如果中间用户执行任何关键操作,那么我会收到 ANR 错误。
我怎样才能避免这种 ANR,或者除了将时间处理放在单独的线程中之外,我无法避免它?
谢谢。
我有一个链接到我的 Android 应用程序的库,我正在从我的 android 活动中调用该库的一些函数,这些函数调用需要时间(4-5 秒)。
由于库的限制,我不能在单独的线程(使用 AsyncTaks、线程)中调用此函数。
当我调用这些函数并且这些函数同时在处理中时,我的 UI 不会响应用户活动并避免我正在显示处理屏幕,并且如果中间用户执行任何关键操作,那么我会收到 ANR 错误。
我怎样才能避免这种 ANR,或者除了将时间处理放在单独的线程中之外,我无法避免它?
谢谢。
谁编写了这个库,它是什么?我能想到它为什么会引发异常的唯一原因是它试图从您调用它的线程更新 UI。如果库方法需要 4-5 秒来竞争,那么它们应该为您提供一个回调机制,您可以在 UI 线程上更新您的 UI。
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();