草庐IT

android - Activity 生命周期的可靠性(onPause 到 onDestroy)

coder 2023-12-15 原文

经过多年对生命周期的信任,我做了一些挖掘。 现在我不觉得好笑。

我知道并阅读了很多关于 onStop 不能保证被调用等的内容。

我创建了一个简单的应用程序,其中包含 2 个 Activites 和一个自定义应用程序类。我在我能找到的每个回调中都放了一个 Log.d() 并在带有 4.1 的 Galaxy S2 上玩过。 Activity A 在启动时启动,并在其 onResume 中启动 Activity B。Activity B 有一个创建 Nullpointer 的按钮,但除此之外它什么都不做。

现在让我担心/困惑的事情:

  • 如果我在 buttonclick 上创建一个 nullpointer,应用程序会崩溃并且在两个 Activity 中都不会发生回调

  • 如果我按下电源按钮并关闭屏幕,如果 Activity 的显示模式(纵向或横向)与设备的 native 方向不匹配,Activity 将重新启动。我确实知道这一点以及如何覆盖它,但如果它破坏并重新启动我的 Activity ,它会调用 onPause 并且 isFinishing() 返回 false 但 Activity 正在完成并重新启动。

  • 如果上述情况没有发生,即使应用不再可见,也只会调用 onPause

  • 开始另一个 Activity 调用 A 中的 onPause,然后创建 B 到 onResume,然后调用 A 的 onStop。现在我跟踪我在 .App 类中的 Activity ,如果我在 onPause 中注销 A 并在 onResume 中注册 B,将有一个毫秒没有 Activity 被注册。如果我想在没有 Activity 时关闭某些服务,它会一直发生。但是,如果我在 onStop 中注销它(这样它们就会重叠),当用户按下电源按钮并且服务(或线程或其他)继续运行并耗尽电池电量时,它永远不会被注销。

我现在使用 android 已经有一段时间了,我正在尝试实现一个相当复杂的或者可以说是防弹设计。但是几乎不可能跟踪我的 Activity 发生了什么。

  • 必须通过 Intent.ACTION_SCREEN_OFF 检测断电,但当它已经关闭时会发生这种情况。在此之前唯一的事情就是 onPause。

  • homebutton...onUserInteraction 和暂停/停止的某种组合

很难简单地确定我的应用程序(不仅仅是一个 Activity )何时不再被使用并置于后台,以及何时它只是在 Activity 之间转换或何时被系统关闭。因为 .App 类没有终止回调,因为 onTerminate() 仅在模拟器中使用,所以文档说。

也许我只是没有透过树木看到森林...... 帮助将不胜感激!

最佳答案

Android 生命周期可能非常困惑,到目前为止,我只发现了一种方法可以让您对周围发生的事情有一个很好的了解。

你设计你的应用程序的方式总是假设你可以在任何瞬间被杀死,而不需要像 onDestroy() 这样的回调被调用,因为不能保证它们会被调用全部。

检查一个 Activity 是否因为另一个 Activity 进入前台而进入后台的简单方法是使用一个简单的标志:

boolean movingInApp = false;
....
movingInApp = true;
Intent intent...
.....
public void onPause() {
    if(movingInApp) {
        //Called because we're moving to another Activity in our own app
    }
}

public void onResume() {
    movingInApp = false;

}

通过在启动任何 Intent 等之前将 movingInApp 的值设置为 true,您可以跟踪调用 onPause() 的原因.请记住稍后在您的 onResume() 方法中再次将其设置为 false。如果系统让您的应用程序进入后台,这将是错误的,并且您知道您的应用程序被其他人而不是您移到了后台。

至于异常发生时什么都不调用,只要有未捕获的异常,Android 就会简单地杀死你的整个 App 进程。您的应用程序会停止运行,就像您强制退出计算机上的程序一样。系统杀完全,没有任何警告。根本不再执行任何代码。

关于android - Activity 生命周期的可靠性(onPause 到 onDestroy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14705271/

有关android - Activity 生命周期的可靠性(onPause 到 onDestroy)的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby-on-rails - Ruby 的 'open_uri' 是否在读取或失败后可靠地关闭套接字? - 2

    一段时间以来,我一直在使用open_uri下拉ftp路径作为数据源,但突然发现我几乎连续不断地收到“530抱歉,允许的最大客户端数(95)已经连接。”我不确定我的代码是否有问题,或者是否是其他人在访问服务器,不幸的是,我无法真正确定谁有问题。本质上,我正在读取FTPURI:defself.read_uri(uri)beginuri=open(uri).readuri=="Error"?nil:urirescueOpenURI::HTTPErrornilendend我猜我需要在这里添加一些额外的错误处理代码...我想确保我采取一切预防措施来关闭所有连接,这样我的连接就不是问题所在,但是我

  3. ruby - 部署 Rack 应用程序的可靠方法 (Sinatra) - 2

    我正在寻找一种可靠的方式来部署Rack应用程序(在本例中为Sinatra应用程序)。请求将花费一些时间(0.25-0.5秒等待代理HTTP请求)并且可能会有相当大的流量。我应该使用传统的mongrel集群设置吗?使用HAProxy作为负载均衡器?恩金克斯?架子?您使用过哪些解决方案,有哪些优势? 最佳答案 Nginx/unicornFTW!前面的Nginx提供静态文件和unicorn处理Sinatra应用程序。优点:性能、使用unixsocks的良好负载平衡以及无需停机即可部署/升级(您可以在不停机的情况下升级Ruby/Nginx/

  4. 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

  5. ruby - Nokogiri(在 Ubuntu 上)的可靠安装过程是什么? - 2

    我尝试在我的Ubuntu12.04系统上安装Nokogiri,但出现“libxsltismissing”错误,但是libxslt-dev和libxml2-dev已安装。是否有可靠的安装过程?如何检查依赖库的链接?我用的是RVM,RVMpkg也安装了。ERROR:Errorinstallingnokogiri:ERROR:Failedtobuildgemnativeextension./home/victor/.rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingforlibxml/parser.h...yescheckingforl

  6. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  7. Android 10.0 设置默认launcher后安装另外launcher后默认Launcher失效的功能修复 - 2

    1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La

  8. ruby - 我怎样才能可靠地发现 Ruby 可执行文件的完整路径? - 2

    我想写一个脚本,打包成一个gem,它将修改它的参数,然后用修改后的参数exec一个新的ruby进程。换句话说,类似于修改其参数然后执行exec$SHELL$*的shell脚本。为此,我需要一种可靠的方法来发现正在执行当前脚本的ruby​​可执行文件的路径。我还需要获取传递给当前进程的完整参数——Ruby参数和脚本参数。 最佳答案 Rake源代码是这样的:RUBY=File.join(Config::CONFIG['bindir'],Config::CONFIG['ruby_install_name']).sub(/.*\s.*/m,

  9. 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-有没有一种

  10. AiBote 2022 新研发的自动化框架,支持 Android 和 Windows 系统。速度非常快 - 2

    Ai-Bot基于流行的Node.js和JavaScript语言的一款新自动化框架,支持Windows和Android自动化。1、Windowsxpath元素定位算法支持支持Windows应用、.NET、WPF、Qt、Java和Electron客户端程序和ie、edgechrome浏览器2、Android支持原生APP和H5界面,元素定位速度是appium十倍,无线远程自动化操作多台安卓设备3、基于opencv图色算法,支持找图和多点找色,1080*2340全分辨率找图50MS以内4、内置免费OCR人工智能技术,无限制获取图片文字和找字功能。5、框架协议开源,除官方node.jsSDK外,用户可

随机推荐