我列出了不同类别的产品。我必须对它们进行排序。由于查询,加载需要更多时间。在两个活动之间,屏幕变黑了。我想在后台运行查询。我该怎么做以及如何在主要活动中使用其结果? 私有类InsertTask扩展AsyncTask { String cat;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... params) {
Boolean success = false;
try {
category(cat);
success = true;
} catch (Exception e) {
if(e.getMessage()!=null)
e.printStackTrace();
}
return success;
}
@Override
protected void onPostExecute(Boolean success) {
super.onPostExecute(success);
}
private void category(String category) {
try{
Cursor1 = mDbHelper.fetchcategory(category);
}catch(Exception e){
Log.v("Excep", ""+e);
}
}
当被召唤时
InsertTask task = new InsertTask();
task.execute();
我在按钮中列出了类别。那我怎么能得到这些值呢?
答案 0 :(得分:3)
答案 1 :(得分:2)
你很好想到了AsyncTask。首先,您可以在类活动中将此类声明为内部(如果您之前没有这样做过),那么您就可以访问视图类成员。
您也可以通过创建将用于更新UI组件的线程和一个处理程序来执行此操作。请记住,如果您使用线程,则需要锁定/解锁数据库对象,因为线程安全(如果任何其他线程因任何原因访问数据库)。阅读有关dbs的线程安全性的更多信息。
答案 2 :(得分:1)
我正在自己做一些搜索,我看到了这个阅读,它相当长,但看起来非常有用,有很多代码示例。 (我为自己添加了书签。)
Threads, Async, and Handlers O MY!
但某种形式的线程就是罚单。
来自Android开发 (我最喜欢的代码片段)
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
//Do Work here
}
}).start();
}