问题是,就应用程序生命周期处理和易于使用而言,这种体系结构是否可以被认为是安全的?
class CustomApplication extends Application {
...
BehaviorSubject<Friends> mFriends = new BehaviorSubject<Friends>;
public void createObservables() {
Observable.create(new Observable.OnSubscribe<Friends>() {
public void call(Subscriber<?> s) {
while(true) {
mFriends.onNext("randomFriendN");
sleep(10sec);
}
}
})
.subscribeOn(Schedulers.newThread())
.subscribe(new Observer<List<NewsCategory>>() {
public void onNext(Friends f) { //empty }
});
}
public BehaviorSubject<Friends> getFriends() {
return mFriends;
}
}
Update:每次创建新的活动并希望获得数据时,它可以获得ApplicationContext的BehaviorSubject,然后订阅它,Subject将发出最后发出的值;我为什么要这样做?例如。假设你有新闻项目,你获取了新闻提要,你想启动后台任务来获取新闻项目的全部内容,在这种情况下,我可以在你滚动新闻列表时开始获取数据,当你单击详细活动时,我们可以从已经获取的数据中显示它,或者只是下载它。
我认为这是完全安全的,只要在应用程序初始化期间只调用createObservables()一次。一些建议的改变...
我不会在从getFriends()返回的值中公开mFriends的BehaviorSubject部分。这样,getFriends()的调用者就不会想要调用onNext()。将其更改为:
public Observable<Friends> getFriends() {
return mFriends;
}
如果您想要超级安全,那么使用。asObservable(),调用者甚至不能将返回值强制转换回BehaviorSubject。
public Observable<Friends> getFriends() {
return mFriends.asObservable();
}
BehaviorSubject<List<NewsItem>> mNewsItemSubject = BehaviorSubject.create();
void createObservables() {
Observable
.timer(10, 10, TimeUnit.SECONDS, Schedulers.newThread())
.flatMap(new Func1<Long, Observable<List<NewsItem>>>() {
@Override
public Observable<List<NewsItem>> call(Long aLong) {
// Normally you would create a network API that returns Observable<NewsItem>.
// For now just pretend this returned Observable makes an Observable
// network request.
return Observable.just(
Arrays.asList(
new NewsItem("fakeNewsItem"),
new NewsItem("fakeNewsItem1")
)
);
}
})
.subscribe(new Action1<List<NewsItem>>() {
@Override
public void call(List<NewsItem> newsItems) {
mNewsItemSubject.onNext(newsItems);
}
});
}
public Observable<List<NewsItem>> observeNewsItems() {
return mNewsItemSubject;
}
final Observable<List<NewsItem>> newsItemsObservable =
((CustomApplication) getApplication()).observeNewsItems();
newsItemsObservable
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<NewsItem>>() {
@Override
public void onCompleted() {
// All done.
}
@Override
public void onError(Throwable e) {
// Notify user of error (maybe)
}
@Override
public void onNext(List<NewsItem> newsItems) {
// Update the UI with newsItems.
}
});
我试图将自定义对象值传递给Jasper报表,我使用编译后的Jasper即文件。 在jrxml中传递参数 如何访问学生对象?
编辑: 我的理解可能是错误的,但这是一个不同于以编程方式设置语言环境的问题,因为我已经实现了那里建议的答案,我仍然有一些问题。 在这个问题中,我请求帮助解决这些问题(在设置的语言环境中没有参考的问题)。 原始帖子 我试图在我的应用程序中实现自定义语言环境,并遇到几个问题。 在调用setContentView之前,我在所有活动中使用以下代码: 编辑: 我还测试了它与: 我添加到Android中的所有
我正在尝试在我的一个应用程序中使用zxing条形码来扫描条形码。我用intent启动按钮cick上的条形码扫描仪。 我发现,大多数条形码都可以很好地扫描,但当我尝试在我的应用程序中扫描ITF(5个中的2个)条形码时,它不起作用,但如果我只使用zxing条形码扫描仪,它就可以很好地工作。 现在我已经搜索了一段时间,读到我可以使用ALLOWED_LENGTH。我找不到太多关于如何将这些信息传递给扫描仪
问题内容: 主要问题-可能吗?我没有运气就尝试了.. 主app.js 提供者本身 而且我有这样的错误: 有任何想法吗? 谢谢! 问题答案: 您 不能 将服务注入提供者配置部分。 您 CAN 注入服务成初始化提供者的服务的部分。 细节: Angular框架有两个阶段的初始化过程: 阶段1:配置 在此阶段,将初始化所有提供程序,并执行所有部分。这些部分可能包含配置提供程序对象的代码,因此可以将它们与提