有了界面,就有了图像,有了使用用户的程序就可以识别用户的操作,那么一个简单的程序就成功了,手机能展示各种图像,以及接受用户的操作,感觉就是一个完整的程序了,确实是这样的,但是手机里面不只一个程序,那么对于程序而已就有更多的操作了。
程序的启动,一开始我们进入的是桌面,这个程序,然后如果你点击某个程序的图标,就启动那个程序。
程序进入后台,你或许点击了home键,或许跳转到了其他程序,总之,当前程序变为了后台程序,那么该程序会进入一种暂停或者休眠的状态
程序回到前台。对于一个没有关闭的程序,无论你再次点击它的图标,还是通过后台运行程序列表,都是再次唤醒该程序
彻底关闭程序。那么该程序是关闭了,下次再运行这个程序就是启动程序,而不是唤醒程序。
以上的4种情况,对于着一个程序的生命周期
由于程序的生命周期,每个行为都有一个回调函数,所以,我们以回调函数来表示程序的生命周期:
onCreate、onStart、onResume、onRestart、onPause、onStop、onDestory
其中我们经常改写的是onCreate、onResume、onPause、onDestory这4个。
剩下3个因为不是单独触发,触发条件稳定度不高,如果不是特殊情况就不用改写了。
onCreate是程序第一次启动的时候会调用的函数,也就是创建这个程序时,我们会使用。
第一次启动时,onCreate和onStart都会启动。onCreate是仅在第一次启动时,onStart则还有其他情况。
onPause是程序进入后台会启动的程序,当程序不在前台就一定会启用onPause,而且很大概率会启用onStop,也有部分情况不适用onStop。
onResume是程序从后台返回的时候启用的函数,同时大多数情况会启动onStart和onRestart。
onDestory是彻底关闭的时候使用的,如果是从前台程序直接关闭,则onPause、onStop、onDestory都会启用。
所以onStart、onStop、onRestart这三个在使用范围上,比较复杂,同时,基本情况可以尤其他4个完成。
甚至对于后台不进行操作的程序,只需要写onCreate就可以。
我目前学习的思路,这些知识是为了编程而生,因为代码逻辑需要所以才用它们。
说一下android四大基本组件:activiity,service,content provider 以及broadcast。
其中activity就是我们平时所说的程序。点击之后有界面的东西。
Service是服务是指没有界面,但是有程序的有代码的东西。
content provider和broadcast是两种不同的传输数据的组件。
Activity是要进行一些基础的配置,我们可以直接想到的是名字和图标。一个程序,需要一个图标和一个名字供给用户点击。
<application
android:icon="桌面上的图标"
android:label="桌面上图标的名字"
<activity
android:name=".程序的类名1"
android:label="进入界面后显示在界面正上方的名字"
android:launchMode="singleTask" //这个后面讲
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
这是一个例子,其中intent-filter是可以不写的,这里写这个程序里面应该有多个activity其中,点击图标后打开的程序的类名1对应的activity。
启动activity,最常见的是StartActivity(intent),关于intent明天再学。这里根据intent就可以启动相应的程序。
launchMode是加载模式,Activity有四种加载模式:standard、singleTop、singleTask、singleInstance
加载模式主要是在有多个activity运行的情况下,其中一个应用中的一个activity去启动另外activity的时候。
standard,是每次启动的时候,都会启动一个新的,甚至可以自己启动自己,这样就会启动好多个。怎么知道自己启动了好多个了,最佳方式是点击返回键。返回键返回的上一个程序。对于标准模式,自己启动自己,启动好多次,那么点返回键,就很明显了。有兴趣的朋友可以试一试。
singleTop:是指当前应用是前台的话,被启动时,不会创建新的activity。
singleTask: 这个就比较好用,在当前栈中只能启动当前这个activity的话。即,如果在同一个栈里面,如果你启动这个activity,那么,只要它被启动了,那么这个activity就被调到前台来。
singleInstance:这个就更加强大,无视栈的区别,只要是启动,就一定是这个activity。
对于上面的解释很难理解,我提供几个前提,在使用这些前提的情况下,再来理解会容易一点
1:activity换成界面,或者换成网络页面,或者是电脑的文件夹。
电脑文件夹就是典型的standard。你点击进入文件夹A,在进入文件B,在通过B中的快捷方式进入A。 你在这时的A中点击返回,返回到B里面。 再点击返回,回到A中。
2:要有多个activity的意识。这是针对有好几个activity的形式来的。可以考虑有3~5个activity,他们可以互相启用。如果理解activity有困难,请参考思路1
3:不同栈,就是多线程的意识。之前java提到的Thread和Runnable,以及android的AsyncTask,不同线程不同栈。