jjzjj

Android Activity 生命周期 : restoring app after kill - design problem

coder 2023-12-10 原文

atm 我试图让我的应用围绕“onSaveInstanceState”和“onRestoreInstanceState”工作,但我挖掘得越深,出现的问题就越多。

因此,例如,我刚刚意识到,通过这两个函数恢复一项 Activity 是毫无用处的。因为,如果我按下后退按钮并返回到之前的 Activity,则此 Activity 不会获得其“savedInstanceState”包,而是会完全重新创建。

有没有办法恢复整个应用程序而不是仅仅恢复单个 Activity ?或者这只是一个奇怪的设计,我什至不应该费心恢复一项 Activity ?

亲切的问候, 水母

编辑:好吧,愚蠢的我...

我的主要 Activity 获得的包不为空,但仅在“onRestore ...”中。在“onCreate”中它确实是空的,但这一直都是真的。 (例如,不管我是否在杀死后从另一个 Activity 中回来)

所以现在我以另一种方式感到困惑:我之前在另一个 Activity 中测试过这个,在那里,“onCreate”和“OnRestoreInstanceState”的 savedInstanceState 包是一样的!这只是随机的还是主要 Activity 的特殊之处? (也尝试了不同的启动模式,但都没有影响)。

最佳答案

So, for example, I just realized, that restoring one activity via those two functions is pretty useless.

不,如果使用得当,它非常有用。

Because, if I press the back button and return to the activity before, this one doesn't get its "savedInstanceState" bundle and instead gets recreated completely.

不,不是。

如果它已经存在并且在返回栈中,它会被启动(onStart())并恢复(onResume()),但它不会被创建.如果 Android 必须关闭之前的 Activity (例如,由于内存不足),将创建之前的 Activity (onCreate()) 并将传递一个 Bundle包含它在 onSaveInstanceState() 中填充的数据。

如果您在处理 BACK 按钮时胡闹,那么这些陈述就不会是真的。

Is there a way to restore the whole application instead of just a single activity?

没有。

Or is this just a weird design and I shouldn't even bother with restoring one activity?

您当然应该恢复一项 Activity 。

onSaveInstanceState()用于两种场景:

  1. 如果用户更改配置(例如,旋转屏幕),您的 Activity 将被销毁并重新创建。您使用 onSaveInstanceState() 将数据从旧 Activity 实例传递到新 Activity 实例。
  2. 我在上面概述的后退按钮场景。

I have tested this before in another activity, and there, the savedInstanceState bundle of "onCreate" and "OnRestoreInstanceState" where the same!

当然。他们应该是一样的。如果 Activity 完全从头开始创建,onCreate() 将被传递 null 并且 onRestoreInstanceState() 将不会被调用。但是,如果存在实例状态,则该状态 (Bundle) 将同时传递给 onCreate()onRestoreInstanceState()

Is this just random or something special of the main activity?

都没有。它们应该是相同的。

关于Android Activity 生命周期 : restoring app after kill - design problem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6055904/

有关Android Activity 生命周期 : restoring app after kill - design problem的更多相关文章

  1. ruby - 具有基本身份验证和 gzip 的 em-http 流挂起 - 2

    我正在尝试使用GnipPowerTrackAPI,这需要我使用基本身份验证连接到JSON的HTTPS流。我觉得这应该是相当微不足道的,所以我希望一些比我聪明的ruby​​ist可以指出我明显的错误。这是我的ruby​​1.9.3代码的相关部分:require'eventmachine'require'em-http'require'json'usage="#{$0}"abortusageunlessuser=ARGV.shiftabortusageunlesspassword=ARGV.shiftGNIP_STREAMING_URL='https://stream.gnip.com:4

  2. ruby - 在 Ruby 中查找周期和范围集差异的有效方法 - 2

    我在Ruby中有很多时间范围:period=Time.parse('8:00am')..Time.parse('8:00pm')incidents=[Time.parse('7:00am')..Time.parse('9:00am'),Time.parse('1:00pm')..Time.parse('3:00pm'),Time.parse('1:30pm')..Time.parse('3:30pm'),Time.parse('7:00pm')..Time.parse('9:00pm'),]我正试图在这段时间内获得一系列无事件block。对于以上内容:[Time.parse('9:00

  3. ruby-on-rails - 有没有一种简单的方法可以在 Passenger 的请求周期之外运行垃圾收集? - 2

    unicorn有OobGC可用于在一定数量的请求后运行GC.start的机架中间件。PhusionPassenger中有类似的东西吗? 最佳答案 PhusionPassenger4正式引入了带外垃圾回收机制。它比Unicorn更灵活,允许任意工作,而不仅仅是垃圾收集。http://blog.phusion.nl/2013/01/22/phusion-passenger-4-technology-preview-out-of-band-work/ 关于ruby-on-rails-有没有一种

  4. ruby-on-rails - rails 周期性任务 - 2

    我有一个ruby​​onrails应用程序,我试图在其中找到每隔几秒运行一些代码的方法。我发现了很多使用cron或类似cron的实现的信息和想法,但这些只是准确到分钟,并且/或需要外部工具。我想每15秒左右启动一次任务,并且我希望它完全独立于应用程序中(如果应用程序停止,任务也停止,并且没有外部设置)。这用于缓存数据的后台生成。每隔几秒,任务就会收集一些数据,然后将其存储在缓存中,供所有客户端请求使用。该任务非常慢,因此需要在后台运行并且不阻塞客户端请求。我是ruby​​的新手,但有很强的perl背景,我解决这个问题的方法是创建一个间隔计时器和处理程序,它fork、运行代码,然后在完成

  5. ruby-on-rails - Rails 应用程序的生命周期 - 2

    我正在尝试了解Rails应用程序的生命周期。application_controller.rb什么时候运行?是每次更改时只执行一次,还是每次请求时都执行一次?我想了解以下文件:config/environments/*.rb(开发、生产或测试,取决于当前模式)boot.rb环境.rb路线.rb我问这个的原因之一是,我想知道放在哪里比较好初始化代码自定义配置数据编辑:@Gdeglin的回答很好,但我实际上很想知道这些文件中的每一个何时运行。 最佳答案 应用程序Controller.rbApplicationController是所有C

  6. ruby - 在 Sinatra(Ruby) 中,我应该如何创建在应用程序生命周期中只赋值一次的全局变量? - 2

    在Sinatra中,我无法创建在应用程序生命周期中仅分配一次值的全局变量。我错过了什么吗?我的简化代码如下所示:require'rubygems'ifRUBY_VERSION这导致nil2在终端和,2在浏览器中。如果我尝试将@a=1放入initialize方法中,我会在WebApp.run!中遇到错误线。我觉得我错过了一些东西,因为如果我不能有全局变量,那么我如何在应用程序实例化期间加载大数据?beforedo似乎每次有来自客户端的请求时都会被调用。 最佳答案 classWebApp请注意,如果您使用Shotgun或其他在每次请求时

  7. javascript - 使用 ajax 调用 react 组件 - 生命周期 - 2

    所以我有一个使用React和Ajax调用的有趣案例。在上下文中,我有一个带有3个选项卡的Accordion。初始化Accordionreact组件后,我首先打开第一个选项卡,其余选项卡关闭。每个选项卡的主体中都有所谓的DictionaryCall组件,如下所示:returnclassDictionaryCallextendsReact.Component{constructor(props){super();this.state={word:'',data:[],error:false,nodata:false,initialLoaded:props.load}}componentDi

  8. javascript - 为什么 setInterval() 周期每次都变快? - 2

    我正在Javascript上构建自定义slider,我希望每次用户单击slider的div时,slider都应停止X秒。我的代码是:$(document).ready(function(){varciclo;varindex_slide=1;functionstartSlidercicle(){ciclo=setInterval(function(){//Slidercodegoeshere},3000);}//HereIstarttheslideranimationstartSlidercicle();//Whentheuserclicksonadivcalled'slide',st

  9. javascript - 如何从 Vue.js 中的组件生命周期方法访问 mixin 方法内部的函数 - 2

    这是一个例子:混入.jsexportdefault{methods:{aFunction(){//Somefunctionalityhere}}}组件.vueimportmixinfrom'./mixin'exportdefault{mixins:[mixin]created(){//CallaFunctiondefinedinthemixinhere}}我想从组件内部的created()生命周期方法访问在mixin方法内部定义的aFunction。 最佳答案 mixin方法与组件的当前实例合并,所以它只是:created(){th

  10. javascript - 如何知道脚本 block 或 JavaScript 代码的生命周期? - 2

    我想知道javascriptblock/函数是否在加载后始终可用。因为我已经测试了一些东西,现在我有点困惑。我将一个脚本block定义到一个div中。脚本block有一个事件处理函数,用于元素使用ajax重新加载div。ajax调用返回div的纯html并将其替换为当前的html。但这意味着替换执行的脚本。我认为脚本会在替换语句后停止执行。但它没有。执行替换语句后的代码行那么这些东西是如何工作的。您如何描述脚本block的生命周期? 最佳答案 当代码包含在script中时元素被求值时,代码求值的结果成为页面运行时环境的一部分。删除s

随机推荐