我正在显示倒计时,而资产文件中加载了Realm dataBase
SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
if (isFirstRun)
{
handler = new Handler();
Runnable r = new Runnable() {
public void run() {
Intent intent=new Intent(context,FirstRun.class);
startActivity(intent);
}
};
handler.post(r);
RealmConfiguration config = new RealmConfiguration.Builder(context)
.name(Realm.DEFAULT_REALM_NAME)
.migration(new in.webic.longevity.longevity.Word())
.assetFile(context, "Default.realm")
.schemaVersion(0)
.build();
realm = realm.getInstance(config);
realm.close();
SharedPreferences.Editor editor = wmbPreference.edit();
editor.putBoolean("FIRSTRUN", false);
editor.commit();
}
问题:
应该显示倒计时,而不是资产文件时的空白屏幕 复制为默认数据库
然而,活动在几秒钟后(在线程中)开始,由下面的代码加载资产文件,在安装Realm配置时是否有更好的方式显示倒计时。
任何帮助将不胜感激
答案 0 :(得分:1)
如果要显示倒计时,则必须手动复制文件。
然后,在AsyncTask中运行慢速代码。
像这样:
public class LauncherActivity extends Activity {
public void onCreate(...) {
// init view
new SlowTask().execute();
}
class SlowTask extends AsyncTask<Void, Void, Void>{
protected Void doInBackground(Void... params) {
// realm slow code here
return null;
}
protected void onPostExecute(Void result) {
// start your next activity here
}
}
}
答案 1 :(得分:0)
您无法估算处理时间。所以倒计时不是一个好选择。在从资源加载数据之前显示一些进度对话框,然后在加载数据后,关闭对话框。
<强>更新强>
实际上你的问题是你的线程在加载数据之前执行的问题!精细?。
您需要做的是在AsyncTask类中执行所有处理任务,您应该在onPreExecute(...)
方法中显示进度对话框。然后用doInBackground(...)
方法处理工作。然后在onPostExecute(...)
中,关闭进度对话框。
答案 2 :(得分:0)
如果您需要从多个Activites \ Fragments访问您的对象,请考虑扩展Application类并将链接放置到您的对象。如果你需要&#34;初始化&#34;在每个应用程序启动时你的对象(在你的情况下加载db),这可以在你的Application类的onCreate()方法中完成。如果某些对象(活动)需要知道,初始化完成后,您可以使用观察者模式。
示例代码:
您的申请类:
public void onCreate() {
super.onCreate();
mHandler = new Handler(); //for communicating with UI thread
if (firstRun) {
new Thread(new Runnable() {
loadMyDb();
mHandler.post(new Runnable()) {
notifyListeners();
}
}
}
}
您的活动课程:
protected void onCreate() {
super.onCreate();
setContentView(R.layout.your_layout);
//setup your layout and views
MyApplication app = (MyApplication)getApplicationContext();
if (app.isDbLoaded()) {
showContent();
} else {
showProgressBar();
app.addDbLoadListener(this);
}
}
public void onDbLoaded() {
hideProgressBar();
app.removeDbLoadListener(this);
showContent();
}