您的位置:首页 > 移动开发 > Android开发

四大组件之Activity

2016-07-23 23:20 429 查看

四大组件之Activity

Activity组件在application中的主要作用就是和用户交互,下面我们而来详细地了解一下Activity.

(一)Activity的创建

创建一个Activity需要一下几个步骤:

创建一个类,继承Activity。复写里面的的Oncreate()方法;

public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
}
}


创建一个XML布局文件,在Oncreate()方法中加载布局文件;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我的第一个activity"/>
</LinearLayout>


在清单文件中注册Activity

<activity android:name="com.example.activitytest_1.FirstActivity">
</activity>


这样,一个Activity就算创建完成了。当然,这些事最最基本的。下面我们来了解一下Activity之间的数据传输。

(二)Activity之间的数据传输

Activity之间的数据传输是通过Intent对象来实现的。数据传输分为显式Intent和隐式Intent.

隐式Intent:

通过一组动作和数据来匹配一个Activity。

一般用于调用别人的Activity.

实例代码:以打电话为例

Intent intent =new Intent();
Intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parser("tel:123456"));
startActivity(intent);


这里我们需要注意的是:

我们设置action和data时,要匹配我们要跳转的Activity的intent-filter里面的action和data里面的内容,不然无法跳转。

显式Intent:

可以直接通过包名和类名打开Activity,不需要配置intent-filter.

一般用于打开自己的application。

示例代码:

Intent intent =new Intent();
intent.setClass(this,FirstActivity.class);
startActivity(intent);


当我们跳转到第二个Activity之后,需要从第二个Activity里面回传数据时,这是我们就需要以不同的方式来start方式我们的Activity了。这个过程也是三步:

在第一个Activity里面,我们跳转Activity用方法startActivityForResult()来启动Activity。

startActivityForResult(intent,requestCode);


我们还需要同时复写方法onActivityResult(resquestCode,resultCode,intent)

这个方法的作用是在其他Activity回传数据之后会自动调用这个方法。

我们可以根据respondCode 或requestCode来获取intent传过来的数据。建议用respondCode,不会出现空指针异常。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == 11){
//设置组件的文字
et.setText(data.getStringExtra("number"));//从intent中获取到数据
}
if(resultCode ==22){
msg.setText(data.getStringExtra("msg"));
}


}

在跳转之后的页面里面我们需要设置要回传的数据

//设置返回的值
setResult(11, intent);
//关闭Activity
finish();


这样我们就可以实现数据回传的功能了。

(三)Activity的生命周期

Activity生命周期,主要是讲的Activity的从生到死的过程。Activity里面有7个方法和生命周期有关。

public class ExampleActivity extends Activity {

@Override
//Activity被创建的时候调用此方法。
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}

@Override
//Activity即将能被看见的时候调用这次方法
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
}

@Override
//Activity能被看见的之后调用这次方法
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}

@Override
//其他Activity获取到焦点的时候调用此方法
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}

@Override
//Activity将不可见的时候调用此方法
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
}

@Override
//Activity在onPause或者onStop状态重新可见的时候调用此方法
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
}

@Override
//Activity将被销毁的时候调用此方法
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}

}

> 这里值得一提的是,当我们没有做任何设置的时候,手机在横屏竖屏之间相互切换的时候,Activity是先destroy然后create。


要求横竖屏切换activity不杀死 只是做界面的改变,我们可以配置configChanges

<activity
android:name=".FirstActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>


但是开发中如果需要没有明确要求,直接把activity屏幕的方向定死。

<activity
android:name="cn.itcast.sendmessagetest.ContactActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
>
</activity>


(四)Activity的四种启动模式

活动栈:

用来记录用户的操作行为。任务栈里面放置的都是Activity的引用。

Android中维护的任务栈,自增的,都会加1, 当手机重启的时候就会清零,维护的Activity的最大值为Int的最大值。

当启动一个应用程序,系统就会分配一个任务栈给应用。

四种启动模式:

standard 标准 (默认)

特点:当你通过startActivity() 启动的activity的实例的引用就会放置在任务栈

每次启动都会创建一个新的实例

singleTop独占顶端

如果activity已经在栈顶,那么不会创建新的实例,而会复用栈顶的Activity.

如果不再栈顶,创建新的实例

singleTask 单任务栈

特点:如果任务栈里面出现了activity,那么就会清空该activity上面所有的activity,再重用该Activity

singleInstance 单实例

特点:如果activity的启动模式设置了singleInstance 这样的activity会单独存放在一个任务栈里面。并且这样的实例只会有一份引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息