Android四大组件之Activity(一)

          上一次说了Android的四大组件是Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供程序)。今天就先介绍介绍Activity这个家伙吧!         
           1、Activity简述
          Activity是Android应用四大组件之一(另外还有Service、BroadcastReceiver和ContentProvider),Activity也是Android应用中最常见的组件之一,普通用户接触最多的就是Activity。用户可以与Activity提供的屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也是可以比屏幕小的,也可以浮动在其他的窗口之上。
          一个Android应用通常由多个彼此松散联系的Activity组成的,一般情况下会指定应用中的某个Activity为“主”Activity(首次启动应用时呈现给用户的那个Activity)。并且每一个Activity都是可以启动另一个Activity的,以便执行不同的操作。
          当Activity处于Android应用中运行时,同样受系统控制,有其自身的生命周期,系统可以通过Activity的生命周期回调方法通知其状态的变化。
           2、如何创建一个Activity?
          Android提供的Activity类关系如下图所示:
           创建Activity的步骤如下:
                    1)选中需要创建Activity的文件并且右击,打开菜单选择需要创建的Activity,如下所示:
                    2)弹出下图所示的窗口,在窗口中为创建的Activity命名,为Activity的布局文件命名,定义Activity所在的包,然后点击finish完成创建;

          3)创建后的Activity的代码如下所示,而且每个Activity必须实现onCreate方法,并且必须在此方法内调用setContentView()方法,用来定义Activity的用户界面的布局。

          综上所述,就是用Android  Studio创建一个Activity的基本步骤。并且这种方法创建的Activity是可以直接使用的,不需要再进行其他配置。但是问题来了,有的应用程序不可能只有一个Activity,那么怎么来区分应用程序的入口是哪个Activity呢?这时候就需要对Activity来进行一定的配置才能满足我们的需要了。
           3、怎样对Activity进行配置?
          Android应用要求所有的应用程序组件(即四大组件)都必须显式进行配置。配置Activity的方法也很简单,就是在<application.../>中添加元素<activity.../>即可完成Activity的简单配置。如下所示就是上述所建Activity的配置:

配置Activity时通常指定如下几个属性:
     1)name:指定Activity的实现类的类名;
     2)icon:指定Activity对应的图标;
     3)label:指定Activity的标签;
     4)theme:指定Activity的主题;
     5)exported:指定Activity是否允许被其他应用所调用;(如果是设为true,则表示该Activity可以被其他应用所调用)
     6)launchMode:指定Activity的加载模式,总共有四种启动模式,之后会慢慢介绍。(standard、singleTop、singleTask和singleInstance四种启动模式)
     但是,并没有看到如何才能区分Activity是不是程序入口啊,不要着急,除上述的属性配置之外,Activity通常还可以指定一个或多个<intent-filter.../>元素,用于指定该Activity可以响应的Intent(这个东西不知道不要紧,后面也会为大家介绍,但是我觉得像我这么菜的才会不知道吧0.0)。如下就表示是应用程序的入口的Activity:

     当然,<activity.../>的属性不仅仅只有这么几个,还有很多属性,但是都是比较少用的,如果之后需要用到了,可以自行学习。(毕竟现在网络这么方便,总有办法找到一大堆学习资源的....一阵坏笑!)
4、怎样启动和关闭一个Activity?
通过上面的介绍,了解到一个Android应用程序通常会有多个Activity组成,但是只有一个Activity是程序的入口,那么当需要其他Activity的时候,我们怎样去启动其他的Activity呢?
官方为我们提供了两种一个Activity启动另一Activity的方法:
     1)startActivity(Intent  intent):启动其他Activity;

     2)startActivityForResult(Intent  intent,int  requestCode):以指定的请求码(requestCode)来启动Activity,而且程序将会获取新启动的Activity返回的结果(通过重写onActivityResult(...)方法来获取);

官方不仅为我们提供了启动的方法,还为我们提供了两种关闭Activity的方法:
     1)finish():结束当前Activity;
     2)finishActivity(int  requestCode):结束以startActivityForResult(Intent  intent,int requestCode)方法启动的Activity。
但是,官方并不提倡我们开发者使用这些方法显式的结束Activity。而是提倡使用Activity的生命周期来管理Activity的结束。
5、什么是Activity的生命周期呢?
Activity就像一个人一样,也有自己的生老病死的过程,这个过程就是Activity的生命周期,这个过程的流程如下所示:

           总体看来,Activity大致可以分为四种状态:
               1) 运行状态:当前Activity位于前台,用户可见,可以获取焦点;
               2) 暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点;
               3) 停止状态:该Activity不可见,失去焦点;
     4) 销毁状态:该Activity结束,或Activity所在的进程被结束。
在Activity的生命周期中,如下方法会被Android系统回调:
     1) onCreate(Bundle  savedStatus):创建Activity时被回调。该方法只会被调用一次。
     2) onStrat():启动Activity时被回调。
     3) onRestart():重新启动Activity时被回调。
     4) onResume():恢复Activity时被回调。在onStart()方法后一定会回调onResume()方法。
     5) onPause():暂停Activity时被回调。
     6) onStop():停止Activity时被回调。
     7) onDestory():销毁Activity时被回调。该方法只会被调用一次。
通过生命周期的回调方法,可以监控Activity生命周期的三个嵌套循环:
     1)Activity的 整个生命周期发生在onCreate()方法和onDestory()方法之间。Activity应该在onCreate()中执行“全局”状态设置,并释放onDestroy()中的所有其余资源。
     2)Activity的 可见生命周期发生在onStart()方法和onStop()方法之间。在这段时间,用户可以在屏幕上看到Activity并与之进行交互。
     3)Activity的 前台生命周期发生在onResume()方法和onPause()方法之间。在这段时间,Activity 位于屏幕上的所有其他 Activity 之前,并具有用户输入焦点。
Activity的生命周期回调方法如下表所示,仅供参考:



         最后用一段代码来体验一下Activity的生命周期吧:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.tengxin.chelingwangnew.R;

public class Main2Activity extends AppCompatActivity implements View.OnClickListener {
    final String TAG = "Activity";
    private Button startActivity;
    private Button finish;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Log.e(TAG,"--onCreate--");
        startActivity = (Button) findViewById(R.id.btn_intent);
        finish = (Button) findViewById(R.id.btn_finish);
        startActivity.setOnClickListener(this);
        finish.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_intent:
                Intent mIntent=new Intent(this, MainActivity.class);
                startActivity(mIntent);
                break;
            case R.id.btn_finish:
                this.finish();
                break;
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG,"--onStart--");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG,"--onRestart--");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG,"--onResume--");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG,"--onPause--");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG,"--onStop--");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG,"--onDestroy--");
    }
}
当程序启动时,将会执行:
     1>--onCreate--
     2>--onStart--
     3>--onResume--
点击跳转到一个对话框风格的Activity时,将会执行:
     4>--onPause--
          再点击手机上的“返回键”,将会执行:
               5>--onResume--
          再点击“home”建,将会执行:
               6>--onResume--
               7>--onPause--
               8>--onStop--
          当再次启动该程序时,将会执行:
               9>--onRestart--
               10>--onStart--
               11>--onResume--
          最后点击界面上的“退出”,将会结束Activity,执行:
               12>--onPause--
               13>--onStop--
               14>--onDestroy--


          好的,今天就啰嗦到这里吧,对于Activity的介绍还没有完,我们下回继续。如果大家有兴趣和我一起“试坑”的,可以关注我的微信公众号,谢谢大家了!!!
          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员丶星霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值