activity简介

activityAndroid系统四大应用组件之一,其它三个为 Service(服务) 、BroadcastReceiver(广播)、ContentProvider(内容提供器)。

  1. android中一个app的入口是activity,一个app至少要有一个activity,否则该app无法打开。

  2. activity通常是一个单独的窗口。

  3. activity一般通过Intent通信。

  1. 所有的组件在使用时都要在Manifest中注册,activity注册方法为:

    <activity android:name=".MainActivity">
          <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
                  <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
    </activity>
    

    其中intent-filter为过滤器,其中声明表示了该activity响应主操作且置于launcher类别内,即打开app的时候会开启此activity

    <action>元素指定这是应用的主入口点。<category>元素指定此activity应列入系统的应用启动器内,以便用户启动该activity。

生命周期

activity是向用户展示界面的类,同时所有的用户与手机的交互也大都在这个类里面进行初始化等一系列操作,同时activity也有不同的状态,可分为以下几类:

  1. onCreate
  2. onStart
  3. onResume
  4. onPause
  5. onStop
  6. onDestroy
  7. onRestart

以下是activity的生命周期流程图。

activity生命周期
activity生命周期

onCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

onCreateactivity 第一次启动时调用,用于初始化 activity

这是基本的 onCreate 方法。可以看出,其中setContentView(R.layout.activity_main)方法将activity与界面布局联系到了一起,其中 R.layout.activity_main 是与activity相对应的布局文件,一般这个文件在 res/layoout 这个文件夹里面,可以说所有的布局文件,都存在于这个文件夹里面。同时还有一个参数Bundle savedInstanceState,这个参数用于activity意外退出之后的数据恢复。

onStart

在这种状态下,activity处于非前台状态,但有可能是可见的,比如在一个activity中开启一个dialogActivity,那么dialogActivity处于前台状态,之前的activity可见,但是也仅限于可见,不能对其进行操作,称之为非前台状态。

onResume

在这个阶段,activity真正处于与用户进行交互的阶段,每次activity从不可操作到可操作,都会调用这个方法,我们可以在这个函数里面进行一些需要自动刷新的事件。同时activity有时会频繁转入转出前台,这样为了界面转变的流畅性,不应在这里进行比较耗时的事件。

onPause

onResume相对应,当activity由前台转为非前台的时候,会调用这个方法。

onStop

这时activity处于不可见状态,被视为处于“后台”,调用此方法之后,activity实例的所有变量信息将会保存,但无法执行任何代码。

onDestory

activity结束,回收所有的内存,并在此阶段调用onSaveInsanceState()方法,用户结束时保存信息。

以下是各阶段的详细介绍。

activity各阶段介绍

跳转

  1. 显示跳转

    Intent intent = new Intent(FromActivity.this,ToActivity.class);
    FromActivity.this.startActivity(intent);
    

    其中FromActivity是当前所在activityToActivity是要跳转到的activity

  2. 隐式跳转

    Intent intent = new Intent();
    intent.setAction("com.intent.action.LOGIN");
    intent.addCategory("com.intent.category.LOGIN");
    startActivity(intent);
    

    其中的actioncategory要与在Manifest中声明的一致,用于从这些参数映射到相对应的activity

    隐式跳转用于不知道某activity的名称,但知道其指定的action和category的activity,比如在app中打开相机拍照,我们一般使用的时候并不知道负责拍照的activity的名字,所以我们都是使用

    int OPEN_CAMERA = 1;
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra("output",uri);
    startActivityForResult(intent, OPEN_CAMERA);
    

    这段代码的意思就是你告诉系统,你需要调用一个相机,并把从相机中拍到的照片传到uri里面。一个手机里面可能有很多相机activity,比如手机自带的相机,或者一些其他什么的相机,这时系统就会弹出一个选择框,选出你要用的相机,同时也有可能某位同学手抖了抖,把手机root之后删掉了系统自带的相机,这时系统就会向你抱怨说,它没有相应的程序来用。

    由此我们可以看出,使用隐式跳转可以更方便的对手机功能进行扩展,我们只需要写一份筛选性质的代码,让系统把所有符合我们条件的activity列出来,我们再在其中选择。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Activity 一、四种形态 运行状态: 当 Activity 处于栈的顶层,可见,并可与用户进行交互 onRe...
    任教主来也阅读 1,788评论 1 10
  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 5,787评论 2 51
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,751评论 0 17
  • 以前我们寒窗苦读,很多时候并不是为了梦想,而是父母口中的你一定要考上大学,和老师口中的上了大学你就轻松了,再...
    卿醇懿阅读 342评论 0 2
  • 花了8天时间看了《人人都是产品经理》《结网》《启示录》《用户体验要素》4本书,这几本书让我对“产品经理”有了更深的...
    RainaL阅读 371评论 0 0