android - 最佳实践 : Update ArrayAdapter continuously

标签 android multithreading listview adapter handler

我有一个服务,它从网络上获取一些数据并更新“存储”在应用程序中的列表。

因此,我可以从主 Activity 访问它并将它用于我的 ArrayAdapter。

当我更新数据时,列表中的引用项目发生了变化。

我的问题是,在主 Activity 中更新适配器中的数据的最佳做法是什么?

我有两个解决方案,但我不知道它们是否正确。除此之外,我想实现一个不使用太多电池的版本!

第一个:每秒调用一次的线程,使用 notifyDataSetChanged() 更新适配器:

private void startListUpdateThread()  
{
    Thread ListManageThread = new Thread() {
        LinkItem listItem;
        public void run() {
            Log.d("DL", "List Update - start");
            while(true)
            {   
                runOnUiThread(UpdateGUIList);

                try {
                    Thread.sleep(1000); //5Sekunden!
                } 
                catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    Log.e("DL", "ERROR: InterruptedException - " + e.getMessage());
                }
            }
        }
    };
    ListManageThread.start();  
}

private Runnable UpdateGUIList = new Runnable() {

    @Override
    public void run() {
        mFileAdapter.notifyDataSetChanged();
    }
};    

第二:使用延迟的Handler post private final Handler handler = new Handler();

private void startListUpdate()
{
    handler.removeCallbacks(UpdateListUI);
    handler.postDelayed(UpdateListUI, 1000); // 1 second   

}

private Runnable UpdateListUI = new Runnable() {
    public void run() { 
        //Remove Elements first
        removeDeletedItemsFromList();

        //Update Adapter
        mFileAdapter.notifyDataSetChanged();

        handler.postDelayed(this, 1500); // 1,5 seconds
    }
};  

那么,最好的方法是什么?也许还有其他方法可以做到,但我以前没有想到过!

最佳答案

您将使用异步任务而不是使用处理程序。虽然处理程序在这里工作,但它是 JAVA 概念,Async Task 是 Android。

您可以使用以下方法更新 ListView :mFileAdapter.notifyDataSetChanged();只有它是正确的。

关于android - 最佳实践 : Update ArrayAdapter continuously,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8888023/

相关文章:

android - 为自定义 CA 使用网络安全配置

Java线程在不应该的地方停止执行

android - Gridview 单击在自定义 ListView 中不起作用

Android- 支持手势的选项卡布局和列表

android - Kivy (Python) 格式化问题

android - 如何就地更新Android NDK?

multithreading - 如何阐明异步编程和并行编程之间的区别?

java - Java 中的主线程与 UI 线程

android - Android上的音频文件的ListView

java - 有什么办法可以获取listView中的特定 View 吗?