- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 Loopers 和 Realm 时遇到了麻烦。
我有一个 Activity
在 onCreate() 中实例化它的 Presenter
,然后调用它的公共(public)方法之一 initFirstLaunch()
:
RealmChangeListener<CourseDetailed> listener = new RealmChangeListener<CourseDetailed>() {
@Override
public void onChange(CourseDetailed element) {
Log.i("renaud", "courseDetailed.addChangeListener onChange");
computeTableOfContent(element);
Log.i("renaud", "1");
playerViewContract.initWithCourseDetails(element);
Log.i("renaud", "2");
}
};
public void initFirstLaunch() {
courseDetailed = realm.where(CourseDetailed.class).contains("_id", courseId).findFirst();
if (courseDetailed == null) {
courseDetailed = realm.createObject(CourseDetailed.class, courseId);
}
courseDetailed.addChangeListener(listener);
Api.getInstance().backend.getCourse(courseId).enqueue(new CustomRetrofitCallBack<CourseDetailed>(playerViewContract) {
@Override
public void onResponseReceived(final CourseDetailed response) {
Realm.getDefaultInstance().executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealmOrUpdate(response);
}
});
}
});
}
请注意,playerViewContract
是我在此上下文中的 Activity 。
我的问题是 onChange()
被有时 调用,当它调用时它会阻塞我的 UI 线程(并最终引发 OutOfMemoryError
).我的猜测是我不在循环线程中,但是当我在任何地方调用 Looper.prepare()
时它崩溃了,说我已经在循环线程中了。
发生了什么事?
谢谢
编辑:添加 initWithCourseDetailed 代码
@Override
public void initWithCourseDetails(final CourseDetailed detailed) {
Log.i("renaud", "initWithCourseDetails");
mDrawer.post(new Runnable() {
@Override
public void run() {
String title = detailed.getName();
String subtitle = detailed.getCompany().getName();
if (detailed.getThumbnail() != null) {
String picUrl = AppConstants.SERVER_URL + "/api/" + detailed.getThumbnail();
final LinearLayout l = (LinearLayout) mNavigationView.findViewById(R.id.layout);
Picasso.with(ModulePlayerActivity.this)
.load(picUrl)
.config(Bitmap.Config.RGB_565)
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
l.setBackground(new BitmapDrawable(getResources(), bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
}
TextView nameTv = (TextView) mNavigationView.findViewById(R.id.drawer_header_name);
nameTv.setText(title);
TextView jobTv = (TextView) mNavigationView.findViewById(R.id.drawer_header_job);
jobTv.setText(subtitle);
supportInvalidateOptionsMenu();
}
});
}
Api.getInstance().backend.getCourse(courseId).enqueue(new CustomRetrofitCallBack<CourseDetailed>(playerViewContract) {
@Override
public void onResponseReceived(final CourseDetailed response) {
//TEST
Realm realm = null;
try {
realm = Realm.getDefaultInstance();
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealmOrUpdate(response);
}
});
} finally {
if (realm != null) {
realm.close();
}
realm = null;
}
}
});
最佳答案
UI线程是一个Looper线程(它有looper Looper.getMainLooper()
),这意味着它有autoupdate。然而,自动更新意味着您添加到 RealmObject
中的 ChangeListener
将在底层表被修改时被调用,而不只是一次。
(我还应该注意到,RealmChangeListener
被 Realm 的 Context
保留为弱引用,RealmObject
也是如此,所以 to keep the autoupdate and the change listener intact even through GC, it has to be kept as a field reference 。
虽然还值得注意的是,findFirst()
可以在通过 ID 找不到元素时返回 null,否则立即返回该元素。)
所以在我看来,无论 playerViewContract.initWithCourseDetails(element);
做了什么,它都会一次又一次地执行并最终崩溃。
希望我回答了您的问题?
关于android - Realm 和 Looper 恶作剧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39273666/
我有这个重写规则 RewriteEngine On RewriteBase /location/ RewriteRule ^(.+)/?$ index.php?franchise=$1 假设要更改此
我重复了两次相同的计算,但在一次中我得到了浮点异常,而在另一次中却没有。 #include #include #include using namespace std; int main(voi
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this qu
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我有一些代码使用迭代器遍历数组列表。如果满足某个条件,我想将一个对象添加到arraylist。这可以用迭代器完成吗?还是我只需要使用 l循环? itr=particleArr.iterator();
fiddle :http://jsfiddle.net/scottbeeson/TU6Zw/ HTML: Open Items Test1 Test2 Test3
我在使用 Loopers 和 Realm 时遇到了麻烦。 我有一个 Activity 在 onCreate() 中实例化它的 Presenter,然后调用它的公共(public)方法之一 initFi
我正在尝试对 API 进行身份验证,它只允许您使用 POST 和 JSON 作为表单数据进行身份验证,格式为 {"username":"myusername","password":"mypasswo
我尝试了以下代码以了解为什么我在 golang 中遇到 xml 问题。 据我了解,我应该能够编码一个结构,然后将结果数据解编回相同类型的结构? 我期望的结果是一个包含子片的父结构,而不是子片为零? p
这个问题在这里已经有了答案: Why do you use std::move when you have && in C++11? [duplicate] (4 个答案) 关闭 7 年前。 尝试运
Xcode、Cocoa touch 和一般 iOS 开发的新手。并且正在为他们的 iPhone 类(class)参加斯坦福演练。我在几个地方有点困惑,需要向你们提出我的疑问: 我为我的模型创建了两个类
我是一名优秀的程序员,十分优秀!