从Java库访问用于回调的UI线程?

时间:2015-01-16 16:00:49

标签: android

我正在尝试尽可能干净地实施Android应用。

为此,我已经定义了一个Java库来执行我的逻辑和非Android特定功能。

例如,我的应用程序会对REST apis进行大量网络调用,并生成模型和验证。

该库正在使用Retrofit,它处理异步调用。但是,现在我需要链接调用,这意味着:

  1. 首次通话回拨会触发下一个请求(可能会导致回调地狱')。
  2. 默认情况下,在UI线程上输入,创建一个新线程来执行请求,但是当我返回调用者时,我需要能够再次加入UI线程。
  3. 我不热衷于(1),因为我们已经拥有这样的代码,而且它一团糟。

    如果有一种方法可以获得对传入线程(UI线程)的引用,那么

    (2)将是我的首选选项,然后在准备好返回模型时能够再次加入它。

    这可能吗?

2 个答案:

答案 0 :(得分:1)

要在线程上运行任何东西,您需要某种消息循环。 UI线程是Android的一部分,我想如果不访问Android类就无法运行它。

使用系统API轻松获取UI线程。然后你可以发布runnables在该线程上运行。

new Handler(Looper.getMainLooper()).post(new Runnable(){
    public void run(){
        // your code
    }
}

答案 1 :(得分:0)

您可以使用AsyncTask来完成此操作。顾名思义,AsyncTask是一个异步类,它同时具有doInBackground方法,在后台执行类似于Thread的方法,以及onPostExecute方法,它在UI上运行,允许您执行任何与UI相关的活动。有关AsyncTask的更多信息,请访问:http://developer.android.com/reference/android/os/AsyncTask.html