小编ndo*_*ori的帖子

当推出并弹出Backstack时,保存并恢复Fragment的UI状态

背景:

我有一个主要的Activity,它包裹了一个Fragment可以改变的主要部分,并且为了保持一个后备箱,我使用FragmentManager的是后备箱.

保持活动堆栈的主要区别在于,当一个片段被推到后台并被替换时,它会调用它onDestroyView()而不是它onDestroy(),当它返回时它的视图将被重新创建onCreateView().(onCreate()但未调用碎片对象未被调用)

在活动堆栈中,它不会发生,并且视图仍然存在.

这对低端设备有积极影响,因为Android操作系统可以释放一些内存而你不必保持正确的视图(在我的应用程序中,来自服务器的消息可能随时改变视图),这样可以节省宝贵的内存带宽也是如此.

实际问题:

假设我有一个片段,用户点击某些内容并更改了视图,例如扩展了列表.

如果用户然后转到另一个屏幕(即片段),则前一个片段将被推送到后台,并且它的视图将被销毁.

当用户返回时,片段将被重新创建,并且不会"记住"用户所做的更改,例如列表不会被扩展,因为它应该

那么如何在不为每个视图制作特殊情况的情况下保存状态并恢复它?

不受欢迎的答案:

  • 让视图保持活力:做一些事情来保持视图会破坏片段的效率
  • 使用onSaveInstanceState():当片段被推送到后台时,它不会被调用,因为活动没有被破坏而且不是配置改变.
  • 特殊对象:如果有系统可以为您完成的方式,请不要这样做.

android savestate android-fragments back-stack fragmentmanager

7
推荐指数
0
解决办法
578
查看次数

RxJava onBackpressureBuffer不会发出项目

我亲眼目睹了onBackpressureBuffer的奇怪行为,我不确定它是一个有效的行为还是一个bug.

我有一个tcp调用,以一定的速率发出项目(使用流和inputStream,但只是为了一些信息)

最重要的是,我创建了一个使用create的observable,每次准备就会发出一个项目.

我们称之为message().

然后我这样做:

messages()
   .subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread())
   .subscribe({//do some work});
Run Code Online (Sandbox Code Playgroud)

我注意到使用很少抛出MissingBackPressureException的分析工具,所以我在调用中添加了onBackpressureBuffer.

如果我在之后添加observeOn:

messages()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .onBackpressureBuffer()
    .subscribe({//do some work})
Run Code Online (Sandbox Code Playgroud)

Everyting工作得很好,但这意味着只有在获得UI主线程之后它才会缓冲,所以我更喜欢它是这样的:

messages()
    .onBackpressureBuffer()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({//do some work});
Run Code Online (Sandbox Code Playgroud)

事情开始变得奇怪.

我注意到while messages()会继续发出项目,但在某些时候它们将停止发送给订阅者.

更准确地说,正好在16个项目之后,显而易见的是缓冲区将开始持有物品而不会将它们向前传递.

一旦我取消了messages()某种超时机制,它将导致messages()发出onError(),缓冲区将立即发出它保存的所有项目(它们将被处理).

我已经检查过是否是订购太多工作的订户错误但是没有,他已经完成但他仍然没有得到这些物品......

我也尝试request(n)在订阅者中使用该方法,在onNext()完成后请求一个项目,但缓冲区不起作用.

我怀疑Main Android UI Thread的消息系统带有背压导致这个,但我无法解释原因.

谁能解释为什么会这样?这是一个错误还是一个有效的行为?TNX!

android ui-thread backpressure rx-java rx-android

3
推荐指数
1
解决办法
759
查看次数