本文共 5187 字,大约阅读时间需要 17 分钟。
1 概念
Activity其实就是窗口(Window)
文档地址:
2 生命周期
生命周期图: 出自Android.app.Activity
运行(Running)就是窗口在前端,暂停( Pause)就是窗口部分被遮盖失去了焦点,停止( Stop)就是窗口完全看不见了.销毁(Destory)就是窗口被从内存中清除了.
启动时执行 onCreate onStart onResume 三个方法
被部分遮蔽时 执行 onPause 方法 重新回到前台 onResume方法
完全看不到(如按HOME) 时,执行onPause onStop方法, 回到前台执行onStart onResume方法
被销毁时(如按返回键) 执行 onPause onStop onDestory .
3 操作Activity
AndroidManifest.xml中的Application下 android:theme可以操作主题
android:theme="@android:style/Theme.NoTitleBar" 表示一个没有标题栏
android:theme="@android:style/Theme.Translucent.NoTitleBar" 表示一个透明无标题的应用
4 启动Activity
首先每个要启动的Activity都必须写进AndroidManifest文件中,
在Appication结点下建一个 <activity android:name="Act01"></activity> 写上类名就行了
其次启动使用Context方法中的startActivity(Intent i)方法,由于 Activity就是一个Context所以可以直接用,不必写对象.
还需要一个描述要启动的应用的Intent.
代码如下:
Intent intent = new Intent(MainActivity.this, Act01.class);
startActivity(intent);Intent构造函数的第一个参数是一个Context,第二个是要启动的Activity类.
由于这两行是在点击按钮动作中写的,所在的是一个点击按钮动作的匿名类,所以不能直接用this.
5 关闭Activity
调用finish() 方法
6 Activity的数据传递
6.1 传递数据
Intent intent = new Intent(MainActivity.this, Act01.class); intent.putExtra("key", "hello aty01");
startActivity(intent);
想传递比较复杂的数据类型 可以传递 Bundle ,相当于将一系列数据打包
Bundle bundle = new Bundle(); int[] array01 = { 1, 2, 3, 4 }; int[] array02 = { 4, 3, 2, 1 }; bundle.putIntArray("array01", array01); bundle.putIntArray("array02", array02); intent.putExtra("bundle", bundle);
相当与传递了一个包含两个数组的结构体
6.2 取得数据
Intent intent = getIntent(); // 得到与这个Activity关联的Intent String str = intent.getStringExtra("key"); Bundle data = getIntent().getBundleExtra("bundle"); int array01[] = data.getIntArray("array01"); int array02[] = data.getIntArray("array02");
6.3 取得第二个Activity传回的数据
1 只能使用startActivityForResult()启动第二个Activity
startActivityForResult(intent, 0); 多了一个请求码
2 第二个Activity在finish前要设置好返回值
Intent data = new Intent();
data.putExtra("result", "abc"); setResult(1, data);finish();
3 第一个Activity中重写 onActivityResult 来获取数据
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); String str = data.getStringExtra("result"); System.out.println(resultCode + " " + str); }
结束
=========================================
程序:
MainActivity
package cn.zyh.activity;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.widget.Button;public class MainActivity extends Activity{ private Button btnStartAty1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("onCreate"); // 先有setContentView将Activity和布局绑定,才能findViewById btnStartAty1 = (Button) findViewById(R.id.btn01); btnStartAty1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, Act01.class); intent.putExtra("key", "hello aty01"); // 添加复杂的数据 通过bundle完成 Bundle bundle = new Bundle(); int[] array01 = { 1, 2, 3, 4 }; int[] array02 = { 4, 3, 2, 1 }; bundle.putIntArray("array01", array01); bundle.putIntArray("array02", array02); intent.putExtra("bundle", bundle); // startActivity(intent); startActivityForResult(intent, 0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); String str = data.getStringExtra("result"); System.out.println(resultCode + " " + str); } @Override protected void onStart() { super.onStart(); System.out.println("onStart"); } @Override protected void onResume() { super.onResume(); System.out.println("onResume"); } @Override protected void onPause() { super.onPause(); System.out.println("onPause"); } @Override protected void onStop() { super.onStop(); System.out.println("onStop"); } @Override protected void onDestroy() { super.onDestroy(); System.out.println("onDestory"); } @Override protected void onRestart() { super.onRestart(); System.out.println("onRestart"); }}
Act01
package cn.zyh.activity;import java.util.Arrays;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class Act01 extends Activity{ private Button btnClose; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act01); btnClose = (Button) findViewById(R.id.btn02); btnClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent data = new Intent(); data.putExtra("result", "abc"); setResult(1, data); finish(); } }); tv = (TextView) findViewById(R.id.tv); Intent intent = getIntent(); // 得到与这个Activity关联的Intent String str = intent.getStringExtra("key"); Bundle data = getIntent().getBundleExtra("bundle"); int array01[] = data.getIntArray("array01"); int array02[] = data.getIntArray("array02"); str += (" " + Arrays.toString(array01) + " " + Arrays.toString(array02)); tv.setText(str); }}