Activity的概述:
顾名思义,Activity就是活动的意思。在Android中,Activity代表手机屏幕的一屏,或是平板电脑中的一个窗口。它是Android应用中的重要组成单元之一,提供了和用户交互的可视化界面。在一个Activity中,可以添加很多组件,这些组件负责具体的功能。
在Android应用中,可以有多个Activity,这些Activity组成了Activity栈(Stack) ,当前活动的Activity位于栈顶,之前的Activity被压入下面,成为非活动的Activity,等待是否可能被恢复为活动状态.在Activity的生命周期中,有如下4个重要状态:
Activity的生命周期:
Activity的生命周期中有以下方法会被系统回调:
onCreate():在创建Activity时被回调。该方法是最常见的方法,在Eclipse中创建Android项目时,会自动创建一个Activity,在该Activity中,默认重写了onCreate(Bundle savedInstanceState)方法,用于对该Activity执行初始化。
onStart():启动Activity会被回调,也就是当一个Activity变为现时被回调。
onRestart():重新启动Activity时会被回调,该方法总是在onStart()方法以后执行。
onPause():暂停Activity时被回调。该方法需要被非常快速的执行,因为直到该方法执行完毕后,下一个Activity才能被恢复。在该方法中,通常用于持久保存数据。列如:当我们正在玩游戏的时候,突然来了一个电话,这是就可以在该方法中将游戏状态持久保存起来。
onResume():当Activity由暂停状态恢复为活动状态时调用。调用该方法后,该Activity位于Activity栈的栈顶。
onStop():停止Activity时被回调。
onDestroy():销毁Activity时被回调。
在Activity中,可以根据程序的需要来重写相应的方法。通常情况下,onCreate()和onPause()方法是最常用的,经常需要重写这两个方法。
下面是Activity的生命周期图:
实现应用对话框主题的关于Activity
代码如下:
AboutActivity:
package com.example.mytest;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class AboutActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout rel = new RelativeLayout(this);
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.width = 500;
layoutParams.height = 400;
layoutParams.alpha = 100;
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();//屏幕宽度
int height = wm.getDefaultDisplay().getHeight();
layoutParams.x = 0;
layoutParams.y = -height;
rel.setLayoutParams(layoutParams);
// rel.setPadding(20, 20, 20, 20);
rel.setBackgroundColor(Color.rgb(120, 110 , 224));
TextView tv = new TextView(this);
tv.setTextSize(24);
tv.setText("我是Activity窗体");
rel.addView(tv);
setContentView(rel);
}
}
在AndroidMainifest.xml中的配置:
<activity
android:name=".AboutActivity"
android:theme="@android:style/Theme.Dialog"
/>
多个Activity的使用:
使用Bundle在Activity之间交换数据:
注释:Bundle是一个字符串值到各种Parcelable类型的映射,用于保存要携带的数据包。
Intent作为两个Activity之间的交互桥梁,所以只要将数据保存在Intent中,就可以将其传递到另一个Activity中了。
在Android中,可以将要保存的数据存放在Bundle对象中,然后通过Intent提供的putExtras()方法将要携带的数据保存到Intent中。
Activity间传递数据有两种方式:单向传递和双向传递。
单向传递:
在MainActivity中:(由MainActivity向AboutActivity传递数据)
Intent intent = new Intent(MainActivity.this,AboutActivity.class);
Bundle bundle = new Bundle();
String name = "xiaoming";
int pwd = 123;
bundle.putString("name", "xiaoming");
bundle.putInt("pwd", pwd);
intent.putExtras(bundle);
在AboutActivity中:(在AboutActivity中接受数据)
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String name = bundle.getString("name");
int pwd = bundle.getInt("pwd");
双向传递数据:
MainActivity:
int REQUEST_CODE = 200;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(MainActivity.this,AboutActivity.class);
Bundle bundle = new Bundle();
String name = "xiaoming";
int pwd = 123;
bundle.putString("name", "xiaoming");
bundle.putInt("pwd", pwd);
intent.putExtras(bundle);
startActivityForResult(intent, REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 200 && resultCode == 200){
Bundle bundle = data.getExtras();
String name = bundle.getString("name");
int pwd = bundle.getInt("pwd");
}
}
AboutActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String name = bundle.getString("name");
int pwd = bundle.getInt("pwd");
}
public void finisActivity(){
int RESULT_CODE = 200;
Intent intent = new Intent();
Bundle bundle = new Bundle();
String name = "xiaoming";
int pwd = 123;
bundle.putString("name", "xiaoming");
bundle.putInt("pwd", pwd);
intent.putExtras(bundle);
setResult(RESULT_CODE, intent);
finish();
}
以上就是Activity的基本使用方式,其实Activity要真正研究还是有点深的,比如Activity的启动栈运行的理解和运用。