原文网址:http://www.cnblogs.com/piaoxuewuming/archive/2013/05/22/3092278.html
一、Activity是什么
Activity——它是一个可以同用户交互的应用程序组件。Android程序中的每个Activity都提供了一个单独的界面,它相当于Winform程序的Form。
二、创建Activity
在现有Project中创建Activity,可以按照:File -> New -> Other -> 选择Android/Android Activity -> 点击Next,设置Activity模板 -> 点击Next,设置Acitivity Name,Layout,Parent等信息 -> 点击Finish 完成Activity的创建。按此方式,我们在程序中创建一个名为DisplayMessageActivity,指定parent为MainActivity。
那么如何指定Android App 默认启动的Activity呢?这就得了解文件AndroidManifest.xml
我们可以清楚的看到我们创建的两个Activity.当我们需要设置某个Acitivity为默认启动Activity时,该Activity的必须配置包含以下信息:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
三、Android 页面跳转
一个Android 程序一般是由多个Activity组成,通过一个小列子介绍下如何完成不同的Activity的跳转和切换。
在一个Activity中打开另一个Activity,会使用到Android的另一个组件:Intent。这里以从MainActivity跳转到DispalyMessageActivity为例:
界面代码:主页
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:context=".MainActivity" > <EditText android:id="@+id/txtMsg" android:layout_width="200dp" android:layout_height="wrap_content" android:inputType="text" > </EditText> <Button android:id="@+id/sendMessage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="sendMessage" android:text="@string/btnSendText" /> </LinearLayout>
显示页:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".DisplayMessageActivity" > <TextView android:id="@+id/txtshow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" /> </RelativeLayout>
后台代码:
package com.example.test; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.EditText; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void sendMessage(View view) { Intent disIntent=new Intent(this,DisplayMessageActivity.class); EditText editText=(EditText)findViewById(R.id.txtMsg); disIntent.putExtra("showvalue",editText.getText().toString()); startActivity(disIntent); } } package com.example.test; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.widget.TextView; public class DisplayMessageActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_message); Intent showIntent=getIntent(); String messageString=showIntent.getStringExtra("showvalue"); TextView showtxt=(TextView)findViewById(R.id.txtshow); showtxt.setText(messageString); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_display_message, menu); return true; } }
运行结果:
四、Activity生命周期
已经很完整的描述了Activity的生命周期,以及状态转换。但这里针对上图做几点说明:
(1)Activity生命周期中,有很多种状态。其中包括Resumed(运行态,可见且可交互),Paused(暂停,部分可见但不可交互),Stoped(停止态,不可见),Destroyed/Killed(销毁)等;
(2)Entire Lifetime,完整的生命周期从调用onCreate()开始,直至调用onDestroy()结束;
(3)Visible Lifetime,生命周期中可见的阶段,发生在调用onStart()之后,onStop()之前。处于Resumed,或Paused态,在这期间Activity处于屏幕上;
(4)Foreground Lifetime,生命周期可交互的阶段,在调用onResume()之后,onPause()之前。在这期间,Activity显示在所有其他Activity之前,并获取输入焦点。
(5)Android系统通过调用onCreate()方法创建Activity实例.onDestroy()方法释放,关闭Activity;
(6)Android系统通过栈管理Activities,屏幕最前端的Activity位于栈顶。不在栈顶的Activity一般处于Paused状态,Stoped状态,或者Destroyed中的一种;
(7)实际应用中,我们通过重载Android生命周期中不同的方法,实现对不同状态下Activity的控制。如:我们可以重载onCreate()方法,实现对数据库的初始化;重写onDestroy(),执行删除数据库操作等。
(8)Activity的成功启动,会依次调用:onCreate() -> onStart() -> onResume();
(9)关闭一个Activity,系统会依次调用:onPause()->onStop()->onDestroy();
(10)从一个MainActivity跳转到DisplayMessageActivity时,会先调用MainActivity.onPause(),当DispalyMessageActivity打开后,MainActivity会调用onStop()进入Stoped状态;
(11)关闭DisplayMessageActivity回到MainActivity时,系统先调用DispalyMessageActivity.onPause() ,然后依次调用MainActivity.onRestart()->MainActivity.onStart()->MainActivity.onResume()进入Resumed状态,这之后DisplayMessageActivity才会继续关闭流程,完成Activity的关闭。