Android四大组件之活动分析(笔记)

时间:2022-04-20 16:10:36
  • 活动被创建执行的第一个方法
  • 隐藏标题栏
  • 在活动中使用Toast
  • 销毁活动
  • 活动的四种状态和七种回调方法
  • 对话框式的活动
  • 在活动回收之前保存数据
  • 知晓当前是在哪一个活动
  • 随时随地退出程序
  • 启动活动的最佳写法

活动被创建执行的第一个方法

    1. public class HelloWorldActivity extends Activity {  
    2.     //onCreate()是活动被创建时必定执行的方法
    3.     @Override  
    4.     protected void onCreate(Bundle savedInstanceState) {  
    5.         super.onCreate(savedInstanceState);  
    6.         setContentView(R.layout.hello_world_layout);  //引入hello_world_layout.xml布局
    7.     }  


隐藏标题栏

在onCreate方法中

  1.     protected void onCreate(Bundle savedInstanceState) {  
  2.         super.onCreate(savedInstanceState);  
  3. requestWindowFeature(Window.FEATURE_NO_TITLE);//必须在setContentView()之前执行,不然会报错
  4.         setContentView(R.layout.hello_world_layout);  //引入hello_world_layout.xml布局
  5.     } 


在活动中使用Toast

  1. protected void onCreate(Bundle savedInstanceState) {  
  2.     super.onCreate(savedInstanceState);  
  3.     requestWindowFeature(Window.FEATURE_NO_TITLE);  
  4.     setContentView(R.layout.first_layout);  
  5.   
  6.     Button button1 = (Button) findViewById(R.id.button_1);  
  7.     button1.setOnClickListener(new OnClickListener() {  
  8.         @Override  
  9.         public void onClick(View v) {  
  10.             Toast.makeText(FirstActivity.this"You clicked Button 1",  Toast.LENGTH_SHORT).show();  
  11.         }  
  12.     });  
第一个参数是 Context 

第二个参数是文本内容

第三个参数是显示的时长

>有两个内置的常量可以选择Toast.LENGTH_SHORT和Toast.LENGTH_LONG


销毁活动

直接使用finish(),例如点击这个按钮销毁这个活动。(一般和返回键一起使用)

  1. button1.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.     finish();  
  5.     }  
  6. }); 

按下返回键会调用onBackPressed()方法。


活动的四种状态和七种回调方法

Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack)


每个活动在其生命周期中最多可能会有四种状态。

1.运行状态

2.暂停状态

3.停止状态

4.销毁状态


Activity类中定义了七个回调方法,覆盖了活动生命周期的每一个环节。

1.onCreate()

2.onStart

3.onResume()

4.onPause()   这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。

5.onStop()

6.onDestroy()

7.onRestart()


完整生存期:onCreate()和onDestroy()方法之间所经历的

可见生存期:onStart()和onStop()方法之间所经历的

前台生存期:onResume()和onPause()方法之间所经历的


对话框式的活动

  1. <activity android:name=".NormalActivity" >  
  2. </activity>  
  3. <activity android:name=".DialogActivity" android:theme="@android:style/ Theme.Dialog" >  
  4. //指定主题是对话框式,xml文件的代码和普通的一样,启动这个活动是不会遮挡整个屏幕。
  5. </activity>

在活动回收之前保存数据

  1. @Override  
  2. //这个方法会保证一定在活动被回收之前调用
  3. protected void onSaveInstanceState(Bundle outState) {  
  4.     super.onSaveInstanceState(outState);  
  5.     String tempData = "Something you just typed";  
  6.     outState.putString("data_key", tempData);  
取出数据
  1. @Override  
  2. //Bundle参数一般情况下都是null,但是如果有通过onSaveInstanceState()方法来保存数据的话,这个参数会存有之前所保存的全部数据。
  3. protected void onCreate(Bundle savedInstanceState) {  
  4.     super.onCreate(savedInstanceState);  
  5.     setContentView(R.layout.activity_main);  
  6.     if (savedInstanceState != null) {  
  7.         String tempData = savedInstanceState.getString("data_key");  
  8.     }  
  9. }  

Bundle可以结合Intent一起传递数据。


知晓当前是在哪一个活动

新建一个AaseActivity类继承自Activity类并重写它的方法

  1. public class BaseActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         Log.d("BaseActivity", getClass().getSimpleName());  //获取当前实例的类名
  6.     }  
让之后的类继承这个类


随时随地退出程序

新建一个ActivityCollector类作为活动管理器

  1. public class ActivityCollector {  
  2.     public static List<Activity> activities = new ArrayList<Activity>();  
  3.         public static void addActivity(Activity activity) {  
  4.         activities.add(activity);  
  5.     }  
  6.     public static void removeActivity(Activity activity) {  
  7.         activities.remove(activity);  
  8.     }  
  9.     public static void finishAll() {  
  10.         for (Activity activity : activities) {  
  11.             if (!activity.isFinishing()) {  
  12.                 activity.finish();  
  13.             }  
  14.         }  
  15.     }  
  16. }
在BaseActivity类中

  1. public class BaseActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         ActivityCollector.addActivity(this);  
  6.     }  
  7.     @Override  
  8.     protected void onDestroy() {  
  9.         super.onDestroy();  
  10.         ActivityCollector.removeActivity(this);  
  11.     }  
  12. }  
然后只要在任何地方调用ActivityCollector.finishAll()方法即可


启动活动的最佳写法

在要启动的活动中(目的活动)

  1. public class SecondActivity extends BaseActivity {  
  2.     public static void actionStart(Context context, String data1, String data2) {  
  3.         Intent intent = new Intent(context, SecondActivity.class);  
  4.         intent.putExtra("param1", data1);  
  5.         intent.putExtra("param2", data2);  
  6.         context.startActivity(intent);  
  7.     }  
  8. //添加了一个actionStart()方法,在这个方法中完成了Intent的构建,另外所有SecondActivity中需要的数据都是通过actionStart()方法的参数传递过来的,然后把它们存储到Intent中,最后调用startActivity()方法启动SecondActivity。
  9.     ……  
  10. }
在出发活动中

  1. button1.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.         SecondActivity.actionStart(FirstActivity.this"data1""data2");  
  5.     }  
  6. });