适当stop和restart你的Activity对于确保用户的数据没有丢失是很重要的,下面是几个需要stop和restart一个Activity的情况:

用户打开最近使用窗口并且切换到其他app,这个Activity被stop,如果用户点击app icon或者从最近使用里返回app,Activity restart

从当前Activity打开另一个Activity,当前Activity在另一个Activity被创建时stop,当用户点返回键时,Activity restart

用户接电话时

与paused状态不同,stopped的状态下Activity完全不可见,用户焦点完全在另一个Activity或另一个App的Activity

Note: 因为系统会在内存中保持Activity实例,所以一般app不用实现onStop或者onRestart方法,甚至onStart方法,因为大多app比较简单,可能只实现onPause方法处理一些资源或者数据即可

Stop你的Activity

当接收到onStop方法调用时,Activity不再可见,应该释放几乎所有不需要使用的资源,一旦Activity stop,如果系统需要回收系统能存,可能销毁实例,极端情况下,系统可能连onDestroy都不调用而直接杀掉进程,所以使用onStop方法处理会导致内存泄露的资源非常重要

即使onPause在onStop之前调用,也应该在onStop中处理更复杂,更耗CPU的操作,像写入数据库等

例如,下面例子像持久存储写入一个草稿

@Override

protected void onStop() {

super.onStop(); // Always call the superclass method first

// Save the note's current draft, because the activity is stopping

// and we want to be sure the current note progress isn't lost.

ContentValues values = new ContentValues();

values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());

values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());

getContentResolver().update(

mUri, // The URI for the note to update.

values, // The map of column names and new values to apply to them.

null, // No SELECT criteria are used.

null // No WHERE columns are used.

);

}

Activity处在stopped状态时,Activity对象会保持在内存中,不需要重新初始化resumed状态之前初始化的组件,系统也会跟踪布局中View的状态,所以如果在EditText中有输入也不必保存

Note: 即使系统在stopped状态下destroy你的Activity,View的状态仍然被保存在一个Bundle中,当用户再次回到这个Activity事例时还会存在

Start/Restart你的Activity

当Activity从stopped状态到前台来,接到onRestart方法调用,系统也会调用onStart方法,因为每次Activity变得可见时系统都会调用onStart方法,无论创建还是restart,onRestart方法只是在stopped状态resume时才调用,所以可以在在其中执行一些特殊的恢复操作,例如用户长时间离开后,在onStart方法中确保系统状态是否可以是再好不过的了

@Override

protected void onStart() {

super.onStart(); // Always call the superclass method first

// The activity is either being restarted or started for the first time

// so this is where we should make sure that GPS is enabled

LocationManager locationManager =

(LocationManager) getSystemService(Context.LOCATION_SERVICE);

boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

if (!gpsEnabled) {

// Create a dialog here that requests the user to enable GPS, and use an intent

// with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action

// to take the user to the Settings screen to enable GPS when they click "OK"

}

}

@Override

protected void onRestart() {

super.onRestart(); // Always call the superclass method first

// Activity being restarted from stopped state

}

因为多数资源在onStop方法中释放,所以一般不用实现onDestroy方法,但也要确保所有可能导致内存泄露的资源已经被释放

作者:RO_wsy 发表于2013-1-14 8:44:14 原文链接

阅读:10 评论:0 查看评论

c语言参悟之旅,Activity生命周期管理之三——S...-《C语言参悟之旅》-读书笔记...-C++函数参数小结_169IT.COM...相关推荐

  1. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  2. Android 插件化原理解析——Activity生命周期管理

    之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...

  3. Android Activity生命周期管理

    http://blog.csdn.net/thl789/article/details/6628463 本文描述Android中Activity的状态,Activity的状态转换,从而总结了Activ ...

  4. Activity生命周期管理

    之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...

  5. Android doc |Getting Started|部分 转载 --管理Activity生命周期

    原文 https://developer.android.com/training/basics/activity-lifecycle/index.html 原文被部分改动 管理Activity生命周 ...

  6. android activity生命周期_Android岗高频面试题合一集,看你能答出几题?

    前言 面试季黄金时期来袭,想必许多朋友在这时有找工作.换工作.跳槽涨薪等想法,但你们都有一个相同的过程那就是面试.大家肯定想知道面试时都问哪些面试相关问题,所以就去网上查找题去刷题,为了省去大家找题的 ...

  7. xamarin Android activity生命周期详解

    学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...

  8. Activity生命周期的三种状态

    生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停止状态.接下来将 ...

  9. 谈谈你对Activity生命周期的理解

    谈谈你对Activity生命周期的理解 首先,为什么Activity要有生命周期呢?我觉得这是移动设备的硬件特性和交互特性决定的. 首先从硬件上来说,移动设备不像是PC平台,它的CPU.内存.电量都受 ...

最新文章

  1. msclass 文字滚动_文字无缝循环滚动(标题向上滚动)
  2. XTUOJ 1206 Dormitory's Elevator
  3. C#流对象使用完后不立即释放的问题
  4. python——获取数据类型
  5. 省钱小贴士(ECS):教你如何每年省出8w+ 块
  6. thymealf如何实现传单个变量给html_纯前端使用JavaScript发送电子邮件,5个步骤图文教程...
  7. Chrome 好玩的插件
  8. Python函数的参数传递方式
  9. SAP License:生产订单结算时候的几个差异
  10. wrk -- 小巧轻盈的 http 性能测试工具.
  11. SAXReader解析
  12. [AHK]定时运行脚本
  13. 【自然语言处理】【聚类】DCSC:利用基于对比学习的半监督聚类算法进行意图挖掘
  14. iOS---Local declaration of hides问题
  15. 一对一直播源码开发,一对一视频直播解决方案新思路
  16. c语言间接寻址与指针,C语言中指针是不是用汇编的间接寻址实现的?
  17. #error: MFC does not support WINVER less than 0x0501.
  18. MongoDB,为何能在NoSQL家族里异军突起?
  19. 一键分享到新浪微博、腾讯微博、搜狐微博、人人网、开心网、百度收藏等js代码大全...
  20. 自制的简易EXCEL背单词模版

热门文章

  1. 一起来分解一个Netty应用
  2. STM8L在IAR编译时出现Warning[Pe188]: enumerated type mixed with another type F:\STM8Ldemo\Bsp\bsp警告处理
  3. 生成黑白相间的国际象棋棋盘
  4. R语言替换某一列中某个特定数值
  5. PDF417 (二维码)
  6. android pad查看cpu,苹果还是安卓?一图教你如何选择适合自己的平板
  7. 女人怎样看男人和男人怎样看女人
  8. 全球土地利用/覆盖数据
  9. 清华大学郑莉老师java_郑莉(信息科学技术学院)老师 - 清华大学
  10. unity3d 摄像机近地面清楚,远地面模糊