【问题标题】:Separate Threads for UI and Logic - AndroidUI 和逻辑的独立线程 - Android
【发布时间】:2012-01-25 13:43:53
【问题描述】:

我想创建单独的线程来实现核心逻辑和更新 GUI。 两个线程不应直接与它们共享数据。为此,我想用同步的 get() 和 put() 方法创建一个向量队列。 假设如果在 GUI 线程中发生 onClick 事件,它会通知核心线程它收到了 OnClick 事件。所以核心线程实现了一些东西并将结果放入向量中。此时,GUI 线程被通知接收到的结果,并获取它并更新屏幕。 我不知道该怎么做。有办法实现吗?

【问题讨论】:

    标签: android multithreading user-interface vector


    【解决方案1】:

    您可以像在任何其他框架或环境中一样执行此操作。 Android api 为您提供了许多高级方法来处理您所描述的多线程应用程序(AsyncTask、Handler/Thread/Runnable 等),但您也可以将它们包装在您自己的处理队列中。我最近已经做到了,我创建了一个逻辑队列进行处理,当我将某些内容推送到队列时,我运行一个方法来检查我的队列中的项目并在后台线程上处理它们。您可以在处理完成时通知系统,方法是发送广播意图并在 Activity 级别注册 IntentFilter(不要忘记取消注册),或者您可以实现自己的侦听器接口,就像 Android UI 框架对 Views 上的 UI 事件所做的那样

    不过,无论您如何包装它,AsyncTask 的核心都使得在后台线程和主 UI 线程之间来回调用变得非常容易。 onPreExecute、onProgressUpdated 和 onPostExecute 都在 UI 线程上运行,而 doInBackground 在为您自动创建的后台线程中运行。没有比这更容易的了

    【讨论】:

    • 它不像“示例代码”那么简单。我的实现分布在几个类和数百行代码中。我可以用伪代码来描述它,并告诉你我用来完成任务的框架中的哪些对象,但我没有任何公开的东西可以用勺子喂你的实现。
    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    相关资源
    最近更新 更多