电子商务网站的实施包括哪些步骤,俄罗斯搜索引擎推广,电子商务适合女生学吗,免费传奇网站免费传奇Activity的生命周期 Hello,巴友们好#xff0c;小菜我又来发博文啦。上篇文章给大家简单的介绍了一下Activity#xff0c;以及如何创建一个最简单的Activity并且在上面显示hello android! 我们知道要创建一个自己的Activity就必须继承Activity这个类#xff0c;并且实现它的…Activity的生命周期 Hello,巴友们好小菜我又来发博文啦。上篇文章给大家简单的介绍了一下Activity以及如何创建一个最简单的Activity并且在上面显示hello android! 我们知道要创建一个自己的Activity就必须继承Activity这个类并且实现它的回调方法以便Activity在本身的生命周期中的两个不同状态切换时供系统调用。 那什么是Activity的生命周期呢Activity的生命周期有哪些呢什么时回调方法呢今天我们就来回答这3个问题。 首先我们先看看google官方给出的Activity生命周期的图。 这张图中包含了Activity的所有生命周期已经它们改变时的条件。 Activity的生命周期包括: onCreate()onStart()onResume()onPause()onStop()onRestart()onDestroy()这7个方法就是Activity的生命周期也是回调方法。为什么这么说呢我们在了解Activity的生命周期时一定要有一个这样的概念“是操作系统在调用我们而不是我们在调用操作系统”也就是说操作系统已经定义好了Activity的各种生命状态的点我们要做的只是在不同的生命周期完成不同的操作就可以了。就了这个概念就不难理解为什么这7个方法又称为回调方法了。 那这些方法是什么时候被系统调用又是什么时候结束的呢 从上图中我们可以看见activity启动之后就会运行: OnCreate()-àonStart()-àonResume()方法 当另外一个Activity被启动时旧的Activity会调用: OnPause()-àonStop()方法 这时候旧的Activity会继续在后台运行除非系统资源不够用了操作系统才会销毁这些不可见的Activity. 如果旧的Activity重新开始在前台运行就会调用: OnRestart()-àonStart()-àonResume()方法 直到退出该Activity才会调用:onDestroy()方法。 现在我们就对这7个方法的运行条件进行单个的分析。 onCreate():当Activity第1次启动时才调用。如果该Activity是第2次调用则不会运行onCreate方法而直接运行onStart方法。比如启动了一个新的Activity旧的Activity转入了后台当旧的Activity在前台再次运行时就不会再执行onCreate()方法了。由于这个特性一般可以在onCreate()方法中初始化一些只需要初始化一次的变量当然这都不是固定的你可以根据你的业务需求来决定。onStart():当这个Activity对用户可见之前被调用。基本上onCreate()方法和onRestart()方法后面总是伴随着onStart方法反之则不成立。onResume():当Activity能够被用户看见的时候被调用。onPause():当另外一个新的Activity启动时首先会调用旧的Activity的onPause()方法。值得注意的是在Android系统中Activity并不一定会充满整个屏幕这是由Activity的样式决定的如果新的Activity并没有充满整个屏幕那么旧的Activity依然是可见的只是背景会变为半透明。这种情况下系统是不会调用旧Activity的onStop()方法的并且在新的Activity结束之后只调用旧Activity的onResume()方法。还要注意的是从API上我们可以看到在onPause(),onStop(),onDestroy()这三个状态时进程是有可能被系统给kill掉的。在进程被系统kill掉之前onPause是唯一保证能够被调用的方法因为在需要紧急释放内存的情况下onStop()onDestroy()方法可能不会被调用。因此我们应该在onPause方法中保存我们的持久性数据。但是我们应该有选择性的在onPause方法里添加操作因为如果onPause()方法执行的时间过长将会影响到新Activity的启动。导致用户体验下降。onStop():当然大多数情况下新的Activity总会充满整个屏幕这就意味着旧的Activity将不可见。当旧的Activity不可见时就会调用onStop()方法了。onRestart():当新的Activity充满整个屏幕并且结束运行旧的Activity又在前台重新运行就会调用旧的Activity的onRestart()方法前提是旧的Activity没有被系统回收掉。onDestroy():当Activity被销毁之前调用。以上就是Activity生命周期的详细描述。 咱们的大诗人陆游说的好:” 纸上得来终觉浅 绝知此事要躬行”。接下来咱们就一起动手去验证一下Activity的生命周期。 首先先建立一个android project 取名为Activity_02. 创建一个Activity叫ActivityLifeCycle.在这个Activity中我们去实现这7个回调方法。并在这7个方法中打印一句话。 1 package edu.activity.viking.test;2 3 import android.app.Activity;4 import android.os.Bundle;5 6 public class ActivityLifeCycle extends Activity 7 {8 /** Called when the activity is first created. */9 Override
10 public void onCreate(Bundle savedInstanceState)
11 {
12 super.onCreate(savedInstanceState);
13 setContentView(R.layout.main);
14 System.out.println(run onCreate);
15 }
16
17
18 Override
19 protected void onStart()
20 {
21 System.out.println(run onStart);
22 super.onStart();
23 }
24
25
26 Override
27 protected void onRestart()
28 {
29 System.out.println(run onRestart);
30 super.onRestart();
31 }
32
33 Override
34 protected void onResume()
35 {
36 System.out.println(run onResume);
37 super.onResume();
38 }
39
40
41 Override
42 protected void onPause()
43 {
44 System.out.println(run onPause);
45 super.onPause();
46 }
47
48 Override
49 protected void onStop()
50 {
51 System.out.println(run onStop);
52 super.onStop();
53 }
54
55 Override
56 protected void onDestroy()
57 {
58 System.out.println(run onDestroy);
59 super.onDestroy();
60 }
61 } 现在我们启动Activity看看控制台输出的信息。 我们可以看到在Activity启动的过程中系统调用了 OnCreate()-àonStart()-àonResume() 三个方法。 我们现在按Back键退出看看会运行什么。 我可以看到当我们退出Activity时系统调用了 OnPause()-àonStop()-àonDestroy() 三个方法。 接下来我们测试另外一种情况。我们需要在我们的Activity_02这个项目中再添加一个Activity,名叫:OtherActivity当然它也必须继承咱们的Activity 我们把新建立的OtherActivity也实现这7个方法并且打印一句话。 1 package edu.activity.viking.test;2 3 import android.app.Activity;4 import android.os.Bundle;5 6 public class OtherActivity extends Activity7 {8 Override9 protected void onCreate(Bundle savedInstanceState)
10 {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.other_activity);
13 System.out.println(OtherActivity onCreate);
14 }
15
16 Override
17 protected void onStart()
18 {
19 System.out.println(OtherActivity onStart);
20 super.onStart();
21 }
22
23 Override
24 protected void onRestart()
25 {
26 System.out.println(OtherActivity onRestart);
27 super.onRestart();
28 }
29
30 Override
31 protected void onResume()
32 {
33 System.out.println(OtherActivity onResume);
34 super.onResume();
35 }
36
37 Override
38 protected void onPause()
39 {
40 System.out.println(OtherActivity onPause);
41 super.onPause();
42 }
43
44 Override
45 protected void onStop()
46 {
47 System.out.println(OtherActivity onStop);
48 super.onStop();
49 }
50
51 Override
52 protected void onDestroy()
53 {
54 System.out.println(OtherActivity onDestroy);
55 super.onDestroy();
56 }
57 } 在onCreate方法中我们使用了setContentView方法这个方法指明我们要显示other_activity.xml文件。Other_activity.xml文件内容很简单。只有一个TextView控件显示一句话。 代码: 1 ?xml version1.0 encodingutf-8?2 LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:layout_widthfill_parent4 android:layout_heightfill_parent5 android:orientationvertical6 7 TextView8 android:layout_widthfill_parent9 android:layout_heightwrap_content
10 android:textother_activity
11 /
12 /LinearLayout 然后我们必须修改ActivityLifeCycle文件。以下是修改好的代码。 1 package edu.activity.viking.test;2 3 import android.app.Activity;4 import android.content.Intent;5 import android.os.Bundle;6 import android.view.View;7 import android.widget.Button;8 9 public class ActivityLifeCycle extends Activity
10 {
11 /** Called when the activity is first created. */
12 Override
13 public void onCreate(Bundle savedInstanceState)
14 {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.main);
17 System.out.println(run onCreate);
18 //通过findViewById这个方法从other_activity.xml中找到一个Button
19 Button button (Button)findViewById(R.id.button);
20 //为按钮注册监听器
21 button.setOnClickListener(new View.OnClickListener()
22 {
23
24 public void onClick(View v)
25 {
26 Intent intent new Intent();
27 intent.setClass(ActivityLifeCycle.this, OtherActivity.class);
28 ActivityLifeCycle.this.startActivity(intent);
29 }
30
31 });
32 }
33
34
35 Override
36 protected void onStart()
37 {
38 System.out.println(run onStart);
39 super.onStart();
40 }
41
42
43 Override
44 protected void onRestart()
45 {
46 System.out.println(run onRestart);
47 super.onRestart();
48 }
49
50 Override
51 protected void onResume()
52 {
53 System.out.println(run onResume);
54 super.onResume();
55 }
56
57
58 Override
59 protected void onPause()
60 {
61 System.out.println(run onPause);
62 super.onPause();
63 }
64
65 Override
66 protected void onStop()
67 {
68 System.out.println(run onStop);
69 super.onStop();
70 }
71
72 Override
73 protected void onDestroy()
74 {
75 System.out.println(run onDestroy);
76 super.onDestroy();
77 }
78 } 本次的修改集中在onCreate方法中。 最后必须把新建立的OtherActivity在androidManifest.xml中进行注册否则系统会报错噢。 到目前为止我们的修改就完成了我们再运行一下看看控制台给出的信息。 程序运行后同样是先执行ActivityLifeCycle中的onCreate-onStart-onResume方法。 我们点击OtherActivity按钮。 从图中我们可以看到,点击OtherActivity按钮后旧的Activity立即执行了onPause方法接着新的Activity执行了onCreate-àonStart-àonResume方法。当新的Activity变为可见状态时旧的Activity执行了onStop方法。 这时我们再按back键让新的Activity结束运行让旧的Activity重新回到前台。 按back键后新的Activity执行了onPause方法接着旧的Activity执行了onRestart-àonStart-àonResume方法这里值得注意的是它并没有调用onCreate方法而是执行了onRestart方法这也证明了旧的Activity被新的Activity遮挡住以后并没有被销毁掉而是一直存在。所以当旧的Activity重新在前台运行时只调用onRestart方法而不会调用onCreate方法。 当旧的Activity为可见状态时新的Activity调用了onStop-àonDestroy方法。也就是说新的Activity被销毁掉了。 如果这时候我们再按一次back键旧的Activity也将会被销毁掉。 这时旧的activity就会执行onPause-àonStop-àonDestroy方法。 这种情况弄明白以后我们就来说说当新启动的Activity没有完全充满屏幕的情况看看是否与上面解释的一样。那么我们怎么才能让新启动的Activity不充满屏幕呢很简单只需要在AndroidManifest.xml中的activity标签中添加一个属性即可。看图: 添加完这个属性后我们再来看看运行的情况如何。 首次运行程序还是调用onCreate-àonStart-àonResume方法。 点击OtherActivity按钮。 看这次新的Activity并没有充满整个屏幕所以旧的Activity只是调用了onPause方法并没有调用onStop方法。 咱们按back键回到上一个Activity. 当旧的Activity重新运行以后果然只是调用了onResume方法。 再次点击back键。我们看到了这时候新的Activity才会调用onStop方法和onDestroy方法。为什么会这样呢这一点小菜我也不是很明白小菜猜想也许在第一次点击back键时对话框式的activity只是被隐藏起来了并没有被旧的Activity覆盖。所以并没有调用onStop和onDestroy方法。当然这都只是小菜个人的猜想如果有大牛知道答案的麻烦告诉小菜一声。省得小菜误人子弟了。 “这篇文章好长啊我都快看不下去了”。没关系最后一个知识点了大家再坚持一会。 最后的一个是不同的退出方式不同的进入方式对Activity生命周期的影响。 以上总结了2种不同方式退出2种不同方式进入Activity的情况。按Home键退出时起始Activity并没有销毁掉也就是说并没有调用onDestroy方法。所以再2种不同的方式进入时它依然时从onRestart方法开始运行。 而按back键退出时Activity是被销毁掉了的当以2种不同的方式再次运行时Activity会从onCreate方法开始运行。 由于写的太多了已经有人开始扔丑鸡蛋了我就不给大家做示范了大家自己动手实验一下看看是不是我所说的这样。 好啦好啦终于写完了好长啊没想到写了这么多。那么再见啦下一篇博文咱们继续深入Activity.转载于:https://www.cnblogs.com/zzy0127/archive/2012/09/05/2672104.html