zoukankan      html  css  js  c++  java
  • Activity详解

    Activtiy:呈现给用户的界面,它有7个生命周期,来控制activity;

        

    转至Android应对Activity进程被杀死

    通常在一部Android手机里同时运行着多个应用(app),每个app对应一个系统进程,当系统需要更多的资源(如内存)而空闲资源不足时,Android系统就会选择杀掉一些低优先级的进程以便释放所需资源,这也是Android开发与PC桌面开发不同的之处。
      Android系统进程优先级的高低通常是这样判断的:
            1)如果一个app正在与用户交互,那么它所在的进程具有最高优先级;
            2)如果一个app是可见的,例如被一个对话框部分遮挡,它所在进程具有第二高的优先级;
            3)如果app当前是不可见的,也就是被切换到了后台,则它所在进程具有第三高的优先级;
            4)如果这个后台app启动了一个service,则它比一般的后台app优先级高一些;
            5)最后,如果一个进程里没有包含任何app,那么这个进程的优先级是最低;
      当系统资源严重不足时,任何一个进程都有可能被杀掉,而当用户想回到一个已经不存在于内存中的Activity时,系统只得新建一个这样的Activity对象并调用它的onCreate()方法进行恢复。因此有时就会出现如下情况:大部分时间运行正常,偶尔在切换Activity时出现空指针异常导致强制关闭,这多半是在onCreate()方法里使用了已经被重置为空的对象造成的。即使不出现异常,也会造成表单数据丢失,严重影响用户体验。

    要解决这类问题:
      1)不能抱现在手机内存大,进程一般不会被杀掉的侥幸心理,而应该以app随时都会被杀掉的态度来谨慎处理。
            2)在适当的位置将Activity所需数据进行持久化(从ram复制到rom或sd卡),并在onCreate()方法里利用这些数据恢复现场,通常包括文档类型和用户状态类型。
            对于文档类型:当用户离开当前Activity时,在onPause()方法里将当前正在编辑的文档持久化到SQLite数据库或者XML文件中,若当前Activity被杀死,可在onCreate()方法中恢复。
           对于状态类型:可通过SharedPreferences在onPanse()方法中将当前状态信息保存,比如保存某个应用的视图配置信息,若当前Activity被杀死,可在onCreate()方法中恢复,这样就可以确保一个较好的用户体验。

      注意事项:
      1)通常在onPause()里持久化而不是在onSaveInstanceState()里,是因为前者比后者更可靠,因为onSaveInstanceState()不属于Activity生命周期的一部分,在onPause()里做持久化比较方便,缺点是调用次数稍多。
            2)从Android 3.0版本开始,Activity进程在被系统杀掉之前,将保证onStop()方法先执行完成,因此如果我们开发的应用只运行在3.0以上,可以把持久化工作放在onStop()里以减少持久化的次数。
      总之一句话:在onPause()或者onStop()里持久化Activity数据,在onCreate()里恢复现场。

             

    人生处处是惊喜
  • 相关阅读:
    day27_递归
    Linux常用命令
    Linux中的标准输入输出文件
    秋招日记《三》——字节三面挂
    《秋招日记》阿里一面
    秋招日记<->PDD一面挂
    十大排序
    第 254 场周赛 数组元素的最小非零乘积
    找不到boost/bind.hpp
    如何在Google浏览器中批量下载网页上的图片
  • 原文地址:https://www.cnblogs.com/ransky/p/5805927.html
Copyright © 2011-2022 走看看