1.Activity 在应用中提供了一个可交互的窗口。该窗口经常是填满整个屏幕的,但也可以比屏幕小并且置于其他窗口上方。
2.一个应用可以由多个 Activity 组成,每个Activity都可以启动别的Activity。当一个新的Activity启动时,先前的一个Activity被stop,但系统会在“返回栈(backstack)”中保存。
3.当一个新的Activity启动时,它被压入返回栈并获得用户焦点;当按下返回按钮时,它从栈中弹出(并销毁),先前的Activity则继续。
4.创建一个Activity:必须创建一个Activity(或者Activity已存在的子类)的子类。在子类中实现各种生命周期之间切换的回调方法。
两个最重要的回调方法:
onCreate():在Activity被创建时调用。在实现中可以初始化Activity的主要组件。最重要的是调用setContentView()来定义该Activity的布局;
onPause():当用户离开当前Activity事被调用。通常用来提交需要被保存的更改。
实现用户界面:
通过继承View类来实现用户界面。
在mainfest文件中生命Activity,格式如下:
<manifest ... > <application... > <activityandroid:name=".ExampleActivity" /> ... </application... > ... </manifest >
<activity>包含在<application>中,可以包含<intent-filter>和<meta-data>。
<activity>可以包含多种属性,如android:theme等,其中android:name属性是必须的。
使用intent 过滤器:通过指定<intent-filter>来声明其他的应用程序怎样激活它。
当新建应用时,main Activtiy中自动包含了以下intent过滤器:
<activity android:name=".ExampleActivity"android:icon="@drawable/app_icon"> <intent-filter> <actionandroid:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
<action>元素指明这个是应用的主入口,<category>指明这个Activity应被列入系统的应用列表。
如果无需其他应用来启动这个Activity,那么intent-filter只需包含上述内容即可。
但如果要让该Activity响应其他应用传来的隐式的intent的话,就必须添加额外的intent-filter
5.启动Activity:通过调用startActivity(),并传入描述你要启动的Activity的Intent。
Intent可以明确指定要启动的activity。如:
Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);
也可以只指定要执行的操作,然后由系统选择一个应用。如:
Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); startActivity(intent);
6.启动Activity来得到一个结果:调用startActivityForResult()来启动其他Activity,然后实现onActivityResult()方法,当所请求的Activity结束时,它会返回一个Intent到 onActivityResult()方法中。如:
private void pickContact() { // Create anintent to "pick" a contact, as defined by the content provider URI Intent intent =new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT_REQUEST); } @Override protected void onActivityResult(int requestCode, intresultCode, Intent data) { // If therequest went well (OK) and the request was PICK_CONTACT_REQUEST if (resultCode== Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { // Perform a query to the contact's contentprovider for the contact's name Cursorcursor = getContentResolver().query(data.getData(), newString[] {Contacts.DISPLAY_NAME}, null, null, null); if(cursor.moveToFirst()) { // True if the cursor is not empty intcolumnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME); Stringname = cursor.getString(columnIndex); // Dosomething with the selected contact's name... } } }
7.关闭一个Activity:调用finish()方法,也可以调用finishActivity()来关闭先前启动的Activity。
8.Activity生命周期:
看几种情况:
1.该Activity第一次被启动时,依次调用onCreate()->onStart()->onResume();
2.按返回键时,依次调用onPause()->onStop()->onDestroy();
3.当直接进去其他程序而未退出时(比如按电话键直接进入电话程序)时,依次调用onPause()->onStop(),而不调用onDestroy();
4.返回到该Activity时,依次调用onRestart()->onStart()->onResume();
可以总结如下:
- 使用onCreate()方法来实例化需要在应用中用到的object;
- 当activity在前台时,使用onResume()来运行services或者代码段;
- 当activity不在前台时,使用onPause()来停止运行services或者代码段;
- 在activity被销毁之前,使用onDestroy()来释放资源;
9.为Activity设置风格和主题:
通常的Activity都是占满整个屏幕的。但也可以设置成对话框模式,如弹出窗口等。只需在 AndroidManifest.xml 文件中更改Activity的android:theme属性即可。如:
<?xml version=“1.0“ encoding=“utf-8“?> <manifest xmlns:android=“http://schemas.android.com/apk/res/android“ package=”net.learn2develop.Activity101” android:versionCode=”1” android:versionName=”1.0” > <uses-sdk android:minSdkVersion= ”14” /> <application android:icon=”@drawable/ic_launcher” android:label=”@string/app_name” android:theme=”@android:style/Theme.Dialog”> <activity android:label=”@string/app_name” android:name=”.Activity101Activity” > <intent-filter > <action android:name=”android.intent.action.MAIN” /> <category android:name=”android.intent.category.LAUNCHER” /> </intent-filter> </activity> </application> </manifest>
效果如图:
10.隐藏Activity的标题:
只需要在OnCreate()方法中添加如下代码:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //---hides the title bar--- requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); }
效果如图: