【问题标题】:Android How to synchronize a Layout view?Android 如何同步一个布局视图?
【发布时间】:2012-05-03 19:31:22
【问题描述】:

我在 ScrollView 中有一个 TableLayout,它由 AsyncTask 不断更新。

我不知道在用户可能正在滚动 TableLayout 的同时,AsyncTask添加/删除行是否“合法”。

如何确保更新不会干扰 GUI 中的滚动?

或者操作系统会为我解决这个问题?

【问题讨论】:

    标签: android scrollview synchronized


    【解决方案1】:

    在 Android 上,运行应用程序的主线程是唯一可以更新 UI 的线程。如果您尝试从 AsyncTask 中修改布局的内容,则会收到错误消息。然而,AsyncTask 的 onPreExecuteonPostExecute 方法是在主线程上运行的,因此您可以在那里更新 UI。

    所以,要回答您的问题,是的,操作系统会通过不允许异步 UI 更新来为您解决这个问题。

    【讨论】:

    • onProgressUpdate() 怎么样?它也在主线程上运行,不是吗?在那里添加行可以吗?如果是,我需要同步它还是正常添加行?
    • onProgressUpdate() 也在主线程上运行。在该方法中添加或删除行是完全可以的。但是,在此过程中,用户将能够与您的应用程序进行交互,因此如果他们正在查看列表,他们可能会注意到正在添加和删除的行。只要他们只是看物品,就可以了。如果行有点击侦听器,您可能会遇到一些奇怪的情况,但我从未尝试过您所描述的内容,所以我不确定。
    • 还有一点,需要注意的是,如果您允许用户在 AsyncTask 运行时切换活动,它将在后台继续。 Activity 在完成之前不会被销毁或垃圾​​收集,您的任务基本上将占用无所事事的周期。这不应该导致您的应用程序直接崩溃,因为所有 UI 组件和类变量都保存在内存中直到被销毁,但可能会导致稍后出现 OOM 错误等问题,或者,根据运行的 Android 版本,阻止未来由于正在使用线程,AsyncTask 无法运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多