Android开发学习笔记之四大组件---Activity的介绍,创建以及生命周期(一)
最近重新温习关于android开发的基础知识,还是分享到博客里,一方面分享给有需要的同学,一方面方便自己后期查看
一、什么是Activity
通俗来讲,一屏的界面就是一个Activity,套用比较教科的话,在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信,Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。
二、怎么创建一个Activity
在代码中创建一个Activity可以分为三步,也即是一个Activity需要三个部分组成
第一个部分是Activity的界面部分,界面文件是一个xml文件,在这个文件中我们可以调整该Activity中的布局,增加各种控件等等,布局文件位于工程下res/layout文件夹中,打开这个文件,各功能如下图:
需要添加控件,在左边控件列表中选择想要添加的控件,左键点住拖动到右边视图界面上,该控件就会添加至Activity布局中,以上面图为例,界面中的button是我添加的一个按钮控件,我们来看一下代码:
button中有一个onClick属性这个是后话,我们后面介绍,到此,一个Activity的UI部分我们就创建好了
第二个部分,我们需要创建Acitivity的逻辑部分,实现部分,并且将逻辑交互的类和UI进行关联,逻辑部分的代码路径基本都在src下的各package中创建,我们来看代码:
public class Start extends android.app.Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn1=(Button) findViewById(R.id.startTest); //定位控件 btn1.setOnClickListener(my); //为按钮绑定监听器 } //实例化一个监听器并重写onClick private OnClickListener my=new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Log.e("baih", "======================================================="); Runtime run=Runtime.getRuntime(); try { run.exec("am instrument --user 0 -w suileyTest.baih/baih.InstrumentationTestRunner"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; }
第三部分,现在逻辑实现有了,界面有了,我们需要把这个Activity在manifest中注册,manifest是整个程序的配置文件,如果组件不在其中进行注册,程序是不认的,注册方法如下:
<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>
<activity
android:name=".ErActivity"
android:label="er">
</activity>
在manifest中的application节点下新增一个activity节点,带上activity的各项属性,即注册了一个Activity,属性包括name(填写Activity的类名),label(Activity标题),以及可以使用intent-filter进行权限的声明
至此,一个Activity就创建好了,这时运行程序,Activity就可以正常展示,并且可以简单的与你进行交互了
Activity的生命周期
一个Activity从启动,到被置为后台,到被关闭,过程对应着自己的一套生命周期,总的来说,一个Activity的状态有以下几种
onCreate; onStart; onRestart; onResume; onPause; onStop; onDestroy
而Activity的活动场景又分为以下几种
1.Activity启动
2.按HOME键,应用程序被置为后台进程
3.将该程序从后台唤醒到前台
4.Activity A中有一个点击事件,点击后启动Activity B,启动后Activity A的活动变化
5.Activity前台时,按back关闭Activity
我们做一个小实验,来通过log来演示各场景的活动变化过程
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("baih", "运行了onCreate"); } @Override public void onStart(){ Log.e("baih", "运行了onStart"); super.onStart(); } @Override public void onRestart(){ Log.e("baih", "运行了onRestart"); super.onRestart(); } @Override public void onResume(){ Log.e("baih", "运行了onResume"); super.onResume(); } @Override public void onPause(){ Log.e("baih", "运行了onPause"); super.onPause(); } @Override public void onStop(){ Log.e("baih", "运行了onStop"); super.onStop(); } @Override public void onDestroy(){ Log.e("baih", "运行了onDestroy"); super.onDestroy(); } public void buttonclick(View v){ Log.e("baih", this.getClass().getName()); Intent in=new Intent(this,ErActivity.class); startActivity(in); AlertDialog.Builder bu=new AlertDialog.Builder(this); bu.setTitle("一个dialog测试"); bu.setPositiveButton("确定",new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog,int whichButton) { Toast.makeText(getApplicationContext(), "点击了确定", 3000).show(); } }); bu.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "点击了取消", 3000).show(); } }); bu.create().show(); } }
1.Activity启动
2.按HOME键将Activity置为后台
3.将该程序从后台唤醒到前台
4.Activity A中有一个点击事件,点击后启动Activity B,启动后Activity A的活动变化
5.Activity前台时,按back关闭Activity
通过上面的实现,我们可以看到一个Activity在不同活动下的状态执行流程,onCreate方法是Activity的初始化方法,一般在其中,进行view的指定,数据源的绑定,等等关乎该Activity进行数据或者界面初始化时需要进行的操作,onDestroy是该Activity结束的方法,一般在其中,进行关闭Activity的操作,比如关闭程序时需要清除缓存,关闭service等等,具体的实际应用大家可以在应用中针对不同活动的需求,在对应的生命周期环节添加适当的操作,既然有Activity的切换,就存在Activity之间的传值问题,以及Activity的部分操作,这个下一节继续BiBi~