2017-08-25 104 views
2

我读了很多帖子告诉长操作(如阅读数据库)不应该在主线程上执行。我应该执行插入,删除,更新我自己的SQLite数据库内AsyncTaskLoader

到目前为止,我使用了CursorLoader(用于“阅读”ContentResolver)和AsynkTaskLoader(用于“阅读”我自己的SQLite DB)。

我知道 “的” ContentResolver执行InsertDeleteUpdate我可以使用AsyncQueryHandler

我的问题是:在我自己的SQLite数据库上执行Insert,DeleteUpdate的最佳方法是什么?

我是否应该在AsyncTaskLoader的方法loadInBackground()内执行这些操作?

谢谢

+1

使用'AsyncTask'和执行'doInBackground'方法的更新。但是,如果您的更新轻而快速,您可以在UI线程中自由执行它们,让您的生活变得更轻松。 – Dusan

+1

谢谢你:) – MDP

+1

即使是慢速设备也能够每秒执行几百次简单的数据库操作,所以没有必要在后台执行一个或几个操作。 https://stackoverflow.com/questions/28188164/android-sqlite-performance – Dusan

回答

1

如果你的查询都是简单,它不会让太多的时间来执行,然后简单地就可以在主线程本身使用它。

如果你正在做大数据处理,那么你有两种选择。

  1. 的AsyncTask

如果你想要的操作后,更新你的用户界面,您可以使用的AsyncTask做的过程在后台线程,并将结果传递到主线程。欲了解更多关于AsyncTaksk请点击here

2. 主题

如果没有术后更新UI,你可以简单地使用主题这样做的目的。

+0

谢谢你的男人。评估的内容是针对移动设备的“大数据流程”? 保存/删除/更新100条记录? 1.000? 1000.000? – MDP

+1

如果我需要查询超过20条记录,我将不会使用主线程。 –

+1

我不知道确切的数字。但这不是关于数字,而是关于执行时间。 –

1

您可以使用后台处理程序线程为您的目的。

private Handler mHandler = null; // global variable 
private HandlerThread mHandlerThread = null; // global variable 

//创建实例内的onCreate()或你的代码中另一个地方,因此将被称为一个人的。如果需要,你也可以单身,但这不是正确的方法。

mHandlerThread = new HandlerThread("HandlerThread"); 
    mHandlerThread.start(); 
    mHandler = new Handler(mHandlerThread.getLooper()); 

//执行后台操作,如:

handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         // Do background work here. 

        } 
       }, 2000); 
+0

谢谢你:) – MDP

相关问题