andriod学习笔记(2)--- 生命周期

andriod的生命周期


官网拔下来的图。。。

做程序要注意的几个地方

  • Does not crash if the user receives a phone call or switches to another app while using your app.
  • Does not consume valuable system resources when the user is not actively using it.
  • Does not lose the user's progress if they leave your app and return to it at a later time.
  • Does not crash or lose the user's progress when the screen rotates between landscape and portrait orientation.
翻译下就是
1.用户接电话,或者转向其他应用程序时,程序不能崩溃
2. 用户没有在使用的时候,不要浪费系统资源
3. 用户离开一会儿,回来后,程序进程不能丢失
4. 用户旋转屏幕的时候,程序不会崩溃,程序进程不会丢失

图上那么多个状态里
有三种是静态的,静态是说啊,程序只有在这三种状态下可以持续一段时间

1. Resumed:在前台,可以有交互

2. Paused:被另外的应用程序阻断,程序是半透明,或者没有覆盖整个屏幕,不能接受任何用户输入,不能执行代码

3. Stopped:完全隐藏,用户不可见,在后台。

其他状态会很快的过度到其他状态,比如系统调用onCreate()之后很快的调用了onStart(),然后很快的调用onResume()。

======================神奇的分割线=========================

用户在屏幕上选择了图标之后,系统会调用在应用中被标识位launcher或者main的activity,的onCreate()方法。


在AndroidManifest.xml文件中定义main Activity 以及应用的根目录。

<activity android:name=".MainActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

如果应用程序没有定义这个的话,不会出现在应用程序列表中。
系统通过调用onCreate方法创建新的activity实例。

实现onCreate方法,必须实现基础的应用程序初始逻辑,这逻辑在整个生命周期中只运行一次。
比如:定义用户界面,一些类作用域变量。

用户可以看到界面,是调用了onStart(),但是很快就调用了onResume(),用户会一直停留在这个状态知道有事件打断。

=======================灰过去的分割线=================================

Activity的销毁

onDestroy,系统调用这个结束activity,并将它完全从系统内存中移除。
通常情况下不需要实现这个方法,因为局部的类的应用会随着activity销毁,而且activity应该在onPause()和onStop()中做了多数的清楚。
如果这个activity在onCreate方法中创建有后台线程,或者其他长时间运行的可能造成内存泄露的资源,那么在onDestory中应该kill它们。

在多是情况下,在调用onDestory之前,已经调用了onPause() onStop(),只有一种情况除外。
就是如果在onCreate中调用了finish(),如这个activity是暂时的,为了调用其他的activity。
那么系统会直接调用onDestory,而不会调用生命周期中的其他方法。

======================掉下来的分割线======================================

Pause Activity

onPause需要做的事情
1. 在暂停状态下不应该继续运行的行为,如播放视屏,停止动画或者一些一直运行的消耗CPU的行为
2. 存储信息,以防用户永远离开应用,只需要保存那些用户希望保存的信息,如邮件草稿,而不是说诸如表单中的信息,存储那些确定用户需要缓存的信息。
3. 是否系统资源,如GPS,释放那些可能影响电池生命周期,当暂停时用户不需要使用的资源。

应该避免在onPause中调用如读写数据库等消耗CUP资源的行为,这个会影响当前前台的activity。
这些操作应该在onStop中去做。

在暂停后,activity还是会停留在内存中,不需要在onResume中重新初始化组件。
用户回到暂停的程序,会调用onResume




Resume Activity

每次activity调用到前台都会调用onResume方法,包括第一次创建的时候。
在onResume中应该初始化在onPause中已经释放的组件,和必须每次都初始化的组件。比如动画和那些只有得到用户焦点才使用的组件。

==============================分割线==========================================

stop and restart

情景:
1. 用户通过应用程序管理器选择了另外的程序,之后又选回来
2. 用户在当前应用中起了一个新的activity,就的这个stop了,之后按了back按钮,就的就restart了
3. 用户接了个电话



stop了就肯定看不到了
需要释放所有用不到的资源,系统直接杀掉进程可能会用不到onDestory,所以需要确保这里已经释放了所有可能造成内存泄露的程序。
使用onStop去实现那些更大的,更消耗CPU的操作,如读写数据库。

从stop状态到start状态会调用onRestart
通常在restart的时候重新实例化。
将onStart作为onStop的一个副本。
比如:用户可能离开应用程序一个很长的时间,onStart是一个很好的地方用来检验需要的系统特性是不是可用。

======================华丽丽的分割线============================

每一次旋转屏幕,系统都会销毁activity,并且重建。
如系统资源不足,可能会被系统关闭,再打开就是recreate

默认的,系统会使用Bundle实例对象状态去保存每一个view对象。
如果需要保存更多的东西,使用onSaveInstanceState,如成员变量,用户进程追踪记录。
onSaveInstanceState中传递了一个Bundle对象。
当用户离开activity系统调用这个方法。

如果在系统销毁activity之后,重建,会将同样的Bundle对象,传递给onRestoreinstanceState。


每次重写onSaveInstanceState,都要调用父类的onSaveInstantceState确保系统自动保存相关状态。

源码来自:https://pan.quark.cn/s/41b9d28f0d6d 在信息技术领域中,jQuery作为一个广受欢迎的JavaScript框架,显著简化了诸多操作,包括对HTML文档的遍历、事件的管理、动画的设计以及Ajax通信等。 本篇文档将深入阐释如何运用jQuery达成一个图片自动播放的功能,这种效果常用于网站的轮播展示或幻灯片演示,有助于优化用户与页面的互动,使网页呈现更加动态的视觉体验。 为了有效实施这一功能,首先需掌握jQuery的核心操作。 通过$符号作为接口,jQuery能够迅速选取DOM组件,例如$("#id")用于选取具有特定ID的元素,而$(".class")则能选取所有应用了某类class的元素。 在选定元素之后,可以执行多种行为,诸如事件监听、样式的变更、内容的更新以及动画的制作等。 关于“一个基于jQuery的图片自动播放功能”,首要任务是准备一组图片素材,这些素材将被整合至一个容器元素之中。 例如,可以构建一个div元素,将其宽度设定为单张图片的尺寸,再借助CSS实现溢出内容的隐藏,从而构建出水平滚动的初始框架。 ```html<div id="slider"> <img src="image1.jpg" alt="Image 1"> <img src="image2.jpg" alt="Image 2"> <!-- 更多图片内容... --></div>```接着,需要编写jQuery脚本以实现图片的自动切换。 这通常涉及到定时器的运用,以设定周期性间隔自动更换当前显示的图片。 通过使用`.fadeOut()`和`.fadeIn()`方法,能够实现图片间的平滑过渡,增强视觉效果。 ```javascript$(document).re...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值