[英]How to update Realm in several threads in Android?
好吧,這是我的“不那么記憶效率”的解決方案:
從Widget的服務我只覆蓋一個方法來創建工廠實例:
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new WidFactory(getApplicationContext());
}
然后是WidFactory類:
class WidFactory implements WidService.RemoteViewsFactory {
private static int myTasksSize;
private Context context;
private Realm realm;
private RealmResults<Task> myTasks;
WidFactory(Context context){
this.context = context;
}
@Override
public void onCreate() {
realm = Realm.getDefaultInstance();
myTasks = realm.where(Task.class).findAll();
myTasksSize = myTasks.size();
realm.close();
}
@Override
public void onDataSetChanged() {
realm = Realm.getDefaultInstance();
realm.refresh();
myTasks = realm.where(Task.class).findAll();
myTasksSize = myTasks.size();
realm.close();
}
@Override
public RemoteViews getViewAt(int position) {
realm = Realm.getDefaultInstance();
myTasks = realm.where(Task.class).findAll();
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widgetrow_layout);
final Task myTask = myTasks.get(position);
rv.setTextViewText(R.id.widgetrow_text_id, myTask.getTaskText());
Intent fillInIntent = new Intent(context, WidShowTaskActivity.class);
fillInIntent.putExtra("code", myTask.getCode());
realm.close();
rv.setOnClickFillInIntent(R.id.widgetrow_text_id, fillInIntent);
return rv;
}
@Override
public int getCount() {
return myTasksSize;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public void onDestroy() {
if (!realm.isClosed()){ realm.close(); }
}
}
這個解決方案的壞處是我打開和關閉了3次:在onCreate()
, onDatasetChanged()
和getViewAt()
。 更糟糕的是,一般來說我只需要一個面向所有小部件的領域實例,所以我想在工廠構造函數中傳遞領域,因此所有工廠都使用一個領域。 但出現了2個問題:
1)我不知道如何從服務啟動時“更新”領域實例; Android不提供任何方法。
2)我不確定內容提供程序是如何工作的,但是工廠類以某種方式將工作分散到多個線程上,而Realm不喜歡這樣。 一點也不。
PS請糾正我,如果我錯了,我對Android和Realm相對較新。
再次感謝您的回復:) @G。 Blake Meike
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.