大家都知道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其他的特性,下篇在详细阐述!