Android 访问UI线程以从Java库回调?
我正在尝试尽可能干净地实现Android应用程序 为此,我定义了一个Java库,用于实现我的逻辑和非Android特定功能 例如,我的应用程序对RESTAPI进行大量网络调用,并生成模型和验证 库正在使用改型,它处理异步调用。但是,现在我需要链接调用,这意味着:Android 访问UI线程以从Java库回调?,android,Android,我正在尝试尽可能干净地实现Android应用程序 为此,我定义了一个Java库,用于实现我的逻辑和非Android特定功能 例如,我的应用程序对RESTAPI进行大量网络调用,并生成模型和验证 库正在使用改型,它处理异步调用。但是,现在我需要链接调用,这意味着: 来自第一个调用的回调将触发下一个请求(可能导致“回调地狱”) 默认情况下,进入UI线程,创建一个新线程来执行请求,但是在返回调用方时,我需要能够再次加入UI线程 我对(1)不感兴趣,因为我们已经有了这样的代码,而且非常混乱 (2) 如果
这可能吗?要在线程上运行任何东西,您需要某种消息循环。UI线程是Android的一部分,我想如果不访问Android类,就不可能在上面运行某些东西 使用系统API很容易获得UI线程。然后可以发布要在该线程上运行的Runnable
new Handler(Looper.getMainLooper()).post(new Runnable(){
public void run(){
// your code
}
});
您可以使用
AsyncTask
来完成此任务。顾名思义,AsyncTask
是一个异步类,它有一个doInBackground
方法,该方法在后台执行,类似于Thread
,还有一个onPostExecute
方法,该方法在UI上运行,允许您执行任何与UI相关的活动。有关AsyncTask
的更多信息可在此处找到:您所说的“链调用”是什么意思?这与ui线程有什么关系?你能给我们一个示例代码吗?在一个请求之后,提出另一个请求。默认情况下,改型将提供在原始请求上运行的回调。我将选项2与asynctask一起使用。您也可以尝试选项3,使用RxJava和chainObservables
.I“我现在正在看RxJava。这不是最容易理解的事情,但它似乎适合我的用例!当然可以,但我在一个纯Java库中,我不想让调用方承担必须离开后台线程的负担。AsyncTask:“这个类在API级别30中被弃用”