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

Android四大组件之Activity--Activity生命周期(一)

2016-01-18 15:15 246 查看
大家都知道Activity是Android四大组件之一,并且作为Android应用界面实现不可或缺的一部分;但是它究竟是什么,有什么特性,接下来,我将就我所了解的Activity,阐述其内在的一面,如果在理解不当之处,还希望各位大神适时提出,不胜感激。

Activity定义

Activity 呈现了用户可以操作的可视化界面,在Android应用中每一个Activity都是一个界面,用来和用户进行交互。

Activity 特性

Activity 是用来和用户进行交互的,所以所有的界面组件和功能都需要在这一组件中实现,但是Activity 又是一个线程,在

【创建Activity

a.在项目中创建一个Activity ,需要继承Activity 或者FragmentActivity 并且父类的onCreate方法

b.在Android_Manifest文件中,通过包名.类名的方式书写Activity标签以声明Activity组件;

c.在Activity的,class类或配置文件中,可以设置Activity的属性

<activity android:name="com.zhao.demo.类名" android:screenOrientation="portrait" ></activity>

Activity 生命周期



由图可见,Activity生命周期依次为onCreate()、onStart()、onResume()、onPause()、onStop()、onRestart()、onDestroy();

在Android中,Activity用友四种基本状态:

a.活跃状态 当启动一个Activity后,这个Activity位于栈顶,此时拥有焦点,处于可见状态并且可以和用户进行交互;

b. 暂停状态 当Activity被其他Activity覆盖(如来电,此时电话界面会覆盖在其他Activity上),此时Activity会调用onPause()方法,失去焦点可见,但是不可以与用户进行交互

c 停止状态 当Activity被其他Activity覆盖,失去焦点并且不可见时;

d.死亡状态 当调用kill.process()方法或者系统被杀死回收,也就是应用停止状态

Activity之间通信

一个Activity相当于一个进程, 一个应用中包含多个进程,即不同的Activity,多个进程之间的通信,就像我们在使用应用的过程中会看到多个Activity,也就是看到不同的界面,而我们在不同的界面之间需要传递一些信息,这就是Activity之间的通信了

既然是两者通信,中间肯定需要信使,而谷歌工程师就为我们提供了一个很好的信使--Intent

使用Intent 可以跳转到指定的界面,在跳转的过程中,可以传值也可以不传值:

一、不传值

通过调用Intent的setClass方法,在其方法中分别传入本界面的上下文,指定界面的类名;然后调用startActivity()方法即可:

Intent intent1 = new Intent(MainActivity.this, WebLoadHtml.class);

startChildActivity(intent1);

二、传值

Intent不仅可以封装java八种基本数据,还可以封装对象实例;在Intent传值过程中主要分为两种情况:

A. 不需要回传值

A.clss 代码

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Intent intent1 = new Intent(A.this, B.class);

intent1.putExtra("data", "1");

startChildActivity(intent1);

}

B.class代码

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Intent intent = getIntent();

String data = intent .getExtra("data"); // data即为从A界面传过来的值

}

B.需要回传值

调用startActivityForResult(intent,code)方法,code传入int类型请求码,一般定义为final类型

这里我先将code设为1

A.clss 代码

public class A extends FramgentActivity{

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Intent intent1 = new Intent(A.this, B.class);

intent1.putExtra("data", "1");

startChildActivity(intent1);

}

/**
* 所有的Activity对象的返回值都是由这个方法来接收
* requestCode:    表示的是启动一个Activity时传过去的requestCode值
* resultCode:表示的是启动后的Activity回传值时的resultCode值
* data:表示的是启动后的Activity回传过来的Intent对象
*/


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1)
{
String data = data.getStringExtra("data");//data变量即为B界面传过来的值
}
}


}

B.class代码

public class B extends FramgentActivity{

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Intent intent = getIntent();

String data = intent .getExtra("data"); // data即为从A界面传过来的值

data = "B界面回传回去的值" ;

intent .putExtra("data",data);

setResult(1,intent);

finish();

}

}

Note:如果传的值为实例对象,那么到指定界面后,接收值时需要做一下强制转换

这样就可以实现两个进程之间相互通信了!

好了,现在先写到这里,Activity其他的特性,下篇在详细阐述!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: