未调用Observer方法。我用旧学校的方式测试了ViewPagerCycler
并且工作得很完美。感谢帮助。
public final class ViewPagerCycler implements LifecycleObserver {
private static final int PERIOD = 3000;
private Timer mTimer;
private TimerTask mTask;
private Activity mActivity;
private ViewPager mPager;
public ViewPagerCycler(Activity activity, ViewPager pager) {
mActivity = activity;
mPager = pager;
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void start() {
int count = mPager
.getAdapter()
.getCount();
mTimer = new Timer();
mTask = new TimerTask() {
@Override public void run() {
mActivity.runOnUiThread(new TimerTask() {
@Override public void run() {
mPager.setCurrentItem((mPager.getCurrentItem() + 1) % count, true);
}
});
}
};
mTimer.schedule(mTask, PERIOD, PERIOD);
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void stop() {
mTask.cancel();
mTimer.cancel();
mTimer.purge();
}
}
活动刚刚总结。我没有添加findViewById
s。
public class SummariziedActivity extends Activity implements LifecycleOwner {
private final LifecycleRegistry mRegistry = new LifecycleRegistry(this);
@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRegistry.addObserver(new ViewPagerCycler(mPager));
}
}
在build.gradle
:
compile "android.arch.lifecycle:runtime:1.0.0-alpha2"
compile "android.arch.lifecycle:extensions:1.0.0-alpha2"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha2"
答案 0 :(得分:5)
似乎实施LifecycleRegistryOwner
还不够。
我在1.0.0-alpha1
遇到了同样的问题,我实际上需要将生命周期事件转发给Lifecycle
实例,以使其正常工作。这是因为文档不符合实现,或者这是库中的错误。
我在onStart()
中仅使用了onStop()
和Observers
,因此我将这些生命周期事件转发给了Lifecycle
。
abstract class LifecyclePreferenceFragment : PreferenceFragment(), LifecycleRegistryOwner {
private val mLifecycleRegistry = LifecycleRegistry(this)
override fun getLifecycle() = mLifecycleRegistry
override fun onStart() {
super.onStart()
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_START)
}
override fun onStop() {
super.onStop()
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_STOP)
}
}
答案 1 :(得分:2)
您应该从Activity
延伸,而不是扩展普通LifecycleActivity
。
否则,您可以参考"Implementing LifecycleOwner in custom activities and fragments":
通过实施内置的 LifecycleRegistryOwner 界面,可以将任何自定义片段或活动转换为 LifecycleOwner (而不是扩展 LifecycleFragment 或<强> LifecycleActivity 强>)。
public class MyFragment extends Fragment implements LifecycleRegistryOwner {
LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this);
@Override
public LifecycleRegistry getLifecycle() {
return lifecycleRegistry;
}
}
如果您想要制作 LifecycleOwner 的自定义类,则可以使用 LifecycleRegistry 类,但您需要将事件转发到该类中。如果片段和活动实现 LifecycleRegistryOwner 接口,则会自动完成此转发。
答案 2 :(得分:1)
问题是您正在扩展平台默认Activity
类而不是支持库的FragmentActivity
。
这是Google工程师在此bug report中所述的内容:
是的,我们目前没有针对平台活动/碎片。
我保持开放,但我们不打算解决这个问题 最近的未来。
使用平台碎片的人的PS:请考虑使用情况 支持库片段。当您使用平台片段时,它意味着 你的代码依赖于多年的实现 片段,随设备一起提供。那些实施是 通常很老,有很多已经修复的错误 支持图书馆。
您可以在生命周期实现中看到,仅为FragmentActivity
启用了生命周期跟踪,例如在LifecycleDispatcher.java
的以下摘录中:
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
if (activity instanceof FragmentActivity) {
((FragmentActivity) activity).getSupportFragmentManager()
.registerFragmentLifecycleCallbacks(mFragmentCallback, true);
}
ReportFragment.injectIfNeededIn(activity);
}
@Override
public void onActivityStopped(Activity activity) {
if (activity instanceof FragmentActivity) {
markState((FragmentActivity) activity, CREATED);
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
if (activity instanceof FragmentActivity) {
markState((FragmentActivity) activity, CREATED);
}
}
有关如何实施生命周期事件调度的更多信息,您可以看到我的另一个答案:https://stackoverflow.com/a/45701439/2510655
答案 3 :(得分:1)
从Support Library 26.1.0开始,如果您的Activity / Fragment从其类扩展,则可以免费获得生命周期回调。
这就是为什么你可以这样做的原因:
爪哇:
getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
void onDestroy() {
Log.d("AppLog", "onDestroy");
}
});
科特林:
lifecycle.addObserver(object : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy() {
Log.d("AppLog", "onDestroy")
}
})
详细了解文档:
https://developer.android.com/topic/libraries/architecture/lifecycle.html