如何确定android

时间:2017-04-04 07:24:50

标签: android android-contentprovider oncreate

在我的onProate ContentProvider中,我想根据以下条件返回true或false。

Context ctx = getContext();
dbhelper = new DBHelper(ctx);
database = dbhelper.getWritableDatabase();

if (database == null) {
  return false;
} else {
  return true;
}

但是在oncreate中执行getWritableDatabase会导致ANR。因此,如果我将此发布到一个单独的线程,那么我将如何决定oncreate的返回值,因为数据库值为null。

Thread mCreateOrOpenDatabaseThread = new Thread (new Runnable(){
  @Override
  public void run() {
    database = dbhelper.getWritableDatabase();
  }
},"CreateOrOpenDatabaseThread");
mCreateOrOpenDatabaseThread.start();

我可以明确地返回true吗?当我们返回true或false时会发生什么,以及它将如何影响我的应用程序。当我们在oncreate中返回true或false时,android运行时内部会发生什么?

1 个答案:

答案 0 :(得分:0)

也许是这样的?

public boolean func() {
    FutureTask<Boolean> ft = new FutureTask<Boolean>(new Callable<Boolean>() {
        @Override
        public Boolean call() throws Exception {
            database = dbhelper.getWritableDatabase();

            return true;//true or false..
        }
    });
    new Thread(ft).start();
    try {
        return ft.get();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}