Android之四大组件(Activity)

Activity简述

 

 

      Activity是Android应用中负责与用户交互的组件。在应用中创建自己的Activity需要继承Activity或者继承Activity的

 

子类。

 

 

 

public class TestActivity extends Activity {
}

 

 

 

 

 

 

 

Activity的使用

 

 

从图1.1可以看出Activity间接继承了ContextThemeWrapper、ContextWrapper、Context、Object这些基类,因此

 

Activity可以直接调用它们的方法。当然只是继承Activity是没有任何意义的,我们还需要实现Activity的一个或多个方

 

法。

 

图1.1

 

 

在平时开发中最常用到的是onCreate(Bundle savedInstanceState)方法,此方法在Activity创建时被回调,我们可

 

以通过setContentView方法的加载需要显示的视图。在Activity中提供了三个setContentView方法,见图1.2

 

图1.2

 

 

(1)public void setContentView(int layoutResID):从资源文件中加载布局ID

 

(2)public void setContentView(View view):加载一个视图到Activity中。

 

(3)public void setContentView(View view, ViewGroup.LayoutParams params):加载一个指定的视图到Activity

 

中,并通过params设置布局参数。

 

创建完我们需要的Activity后,还需要在AndroidMainfest.xml中进行配置。

 

<activity android:name="com.example.TestActivity">

 

当自己的Activity创建完毕后,我们需要启动或者进行销毁,Activity的启动可以使用以下两个方法:

 

 

(1)publicvoid startActivity(Intent intent):启动Activity。

 

(2)publicvoid startActivityForResult(Intent intent,intrequestCode):以指定的请求码requestCode启动Activity,

 

当启动的Activity返回时,可以通过onActivityResult(intrequestCode,int resultCode, Intent data)方法获取结果。

 

销毁Activity可以使用以下方法:

 

(1)publicvoid finish():结束当前Activity。

 

(2)publicvoid finishActivity(intrequestCode):结束以startActivityForResult(Intentintent,int requestCode)方法启

 

动的Activity。

 

 

 

 

 

Activity之间的数据传递

 

 

      当我们从一个Activity启动另一个Activity时,需要将一些数据传递过去,这时我们就需要使用Intent,可以使用

 

Intent提供的多个重载的putExtra方法来进行传递,见图1.3

 

 

图1.3

 

 

从图1.3可以看出,通过Intent可以传递的数据类型多种多样,相应的可以通过图1.4中的方法调用Intent的get方法,获

 

取相应的数据。

 

图1.4

 

 

 

 

Activity的生命周期

 

 

      从Activity创建到销毁,Activity的状态大致可以分为以下四类:

 

(1)     活动状态:当前的Activity位于前台,用户可见,可以获得焦点。

 

(2)     暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。

 

(3)     停止状态:该Activity不可见,失去焦点。

 

(4)     销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束。

 

Activity的生命周期请参看图1.5所示:

 

 

 

图1.5

 

 

 

 

public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();
     
     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }

 

 

 

onCreate(BundlesavedInstanceState):创建Activity时被回调。该方法只会被调用一次。

 

onStart():启动Activity时被回调。

 

onRestart():重新启动Activity时被回调。

 

onResume():恢复Activity时被回调,onStart()方法后一定会回调onResume()方法。

 

onPause():暂停Activity时被回调。

 

onStop():停止Activity时被回调。

 

onDestroy():销毁Activity时被回调。该方法只会被调用一次。

 

从图1.5可以得出,一个Activity正常启动的过程中,他们被调用的顺序是 onCreate -> onStart-> onResume。

 

在Activity被干掉的时候顺序是onPause-> onStop -> onDestroy ,这样就是一个完整的生命周期。

 

如果中止的时候新出的一个Activity是全屏时的调用顺序是onPause->onStop,恢复的时候onStart->onResume。

 

如果打断 这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只是onPause ,恢复 的时候

 

onResume 。

 

 

 

图1.6

 

 

 

从图1.6可以看出, onPause,onstop, onDestroy,三种状态 下 activity都有可能被系统干掉,为了保证程序的正

 

确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。看看

 

官网给出的例子:

 

public class CalendarActivity extends Activity {
     ...

     static final int DAY_VIEW_MODE = 0;
     static final int WEEK_VIEW_MODE = 1;

     private SharedPreferences mPrefs;
     private int mCurViewMode;

     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         SharedPreferences mPrefs = getSharedPreferences();
         mCurViewMode = mPrefs.getInt("view_mode", DAY_VIEW_MODE);
     }

     protected void onPause() {
         super.onPause();
 
         SharedPreferences.Editor ed = mPrefs.edit();
         ed.putInt("view_mode", mCurViewMode);
         ed.commit();
     }
 }

 

在onPause()中使用SharedPreferences.Editor进行写入,在onCreate(Bundle savedInstanceState)中进行读取。

 

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/47315083情绪控

 

©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页