原文链接:a high level of concept about nucleus
Activities可以在任意时间被创建和销毁,而Presenters可以存活更长时间,但是当Application被系统杀死时也会被销毁。
在你的presenter的onCreate方法中,你通过下面某一种助手方法在nucleus的presenter里面注册了你的“任务”。
restartableFirst -> 只传递第一个被observable发射到onNext方法中的值。
restartableLastestCache -> 保留最近一次onNext方法得到的值,并且当每次新的View被attached的时候发射出去。
restartableReplay -> 保留所有onNext方法得到的值,并且在每次新的View被attached的时候发射它们。当View被attached时,如果onNext得到一个新值,则会立即被传递。
“restartable”前缀表示当一个presnter被销毁,当它被重新创建的时候它会重启之前的任务并且被传递到重新创建的activity。每一个任务都需要被赋予一个唯一的id,这样当activity被重新创建时就知道重启哪些任务。
当你的activity被创建时,你需要请求启动presenter(MainActivity.java)。然后presenter会根据id创建observable对象(MainPresenter)。如果执行成功,则会调用activity的onItems方法,如果失败,则调用activity.onNetworkError方法。当一个activity被再一次attached到presenter时,你不需要再到presenter里面去“请求”,它会自动在activity中重新运行。onItems方法(取决于你选择上面介绍的哪个助手方法)。我通常使用restartableLastestCache,当activity被重建的时候,你不需要重新创建Observable去再次访问数据库或者其他耗时操作,这样重启速度会相当快。
你只需要知道当你创建Observable对象的时候设置好observeOn和subscribeOn方法,不然的话所有的任务都会运行在UI线程中。(例如:..observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io())
参考:Restartables