Activity

什么是Android 的四大组件呢?接下来简单了解下。

  1.  Activity

     首先,Activity是Android系统中的四大组件之一,可以用于显示View。Activity是一个与用记交互的系统模块,几乎所有的Activity都是和用户进行交互的。

    Activity就是我们应用程序的界面,主要用来跟我们的用户进行交互的,比如一个文本框,按钮这些就是显示在Activity上的,并且可以接收数据,传递数据到后台,然后再显示出来。

  2.  service

    Service 我们是看不见的,对于绝大部分的数据的处理,业务的处理都是通过 Service 来完成的。

  3.   Broadcast Receiver

    BroadcastReceiver组件是广播接收器,主要是用来监听系统的各个行为的,例如当电量不足的时候会给我们发送一条广播信息。

  4.   Content Provider

    ContentProvider类似于我们的档案馆,里面存放了我们的各种数据,例如通讯录中的信息等,这个组件就是运行程序对其进行访问,然后得到里面的数据。

--http://blog.csdn.net/liuhe688/article/details/6733407

  熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用。

  其实Android中的Activity运行机制跟servlet有些相似之处,Android系统相当于servlet容器,Activity相当于一个servlet,

  我们的Activity处在这个容器中,一切创建实例、初始化、销毁实例等过程都是容器来调用的,

  这也就是所谓的“Don‘t call me, I‘ll call you.”机制

  我们先要知道一下MVC设计模式,在JAVAEE 中MVC设计模式已经很经典了,而且分的也比较清晰了,

  但是在Android中,好多人对MVC在Android开发中的应用不是很清楚,下面我就先来介绍一下MVC在Android开发中的应用:

MVC

M(Model 模型):
             

Model是应用程序的主体部分,所有的业务逻辑都应该写在这里,在Android中Model层与JavaEE中的变化不大,

如:对数据库的操作,对网络等的操作都放在该层

(但不是说它们都放在同一个包中,可以分开放,但它们统称为Model层)。

 V(View 视图):
是应用程序中负责生成用户界面的部分,也是在整个MVC架构中用户唯一可以看到的一层,

接收用户输入,显示处理结果;在Android应用中一般采用XML文件里德界面的描述,

使用的时候可以非常方便的引入,当然也可以使用JavaScript+Html等方式作为View。

C(Controller控制层):
android的控制层的重任就要落在众多的activity的肩上了,所以在这里就要建议大家不要在activity中写太多的代码,

尽量能过activity交割Model业务逻辑层处理。

  好了,在介绍过Android应用开发中的MVC架构后,我们就可以很明确的知道,在Android中Activity主要是用来做控制的,

  它可以选择要显示的View,也可以从View中获取数据然后把数据传给Model层进行处理,最后再来显示出处理结果。

  介绍过Activity的主要作用后,那么我们就要详细说一下Activity了。

  我们来看一下这一张生命周期流程图:

--http://bbs.51cto.com/thread-954794-1.html

Activity 的生命周期是被以下的函数控制的。

public class Activity extends ApplicationContext {
      protected void onCreate(Bundle icicle);
      protected void onStart();
      protected void onRestart();
      protected void onResume();
      protected void onFreeze(Bundle outIcicle);
      protected void onPause();
      protected void onStop();
      protected void onDestroy();
}

onCreate(Bundle)


函数是你进行初始化的地方,这个也是执行


setContentView(View)


函数的地方


setContentView(View)


函数可以传入一个由XML编制的UI界面,可以使UI和具体实现完全分离。


onPause()


函数是处理用户离开当前 Activity 的地方。更重要的是,任何在当前

Activity中的任何改变都要在这个函数中提交。

活动状态

活动状态


当Activity处于Stack(栈)顶时,就是手机当前的现实屏幕,这是 Activity就处于activity或者运行状态。


运行但是失去焦点


当Activity还处于运行状态时,但是屏幕是有另外一个Activity处于文档处于焦点状态,当前的Activity就处于pause。


停止


当Activity被另一个Activity完全覆盖的时候,就被停止了,其实就是虽然在运行,但是用户却看不见。


结束


当Activity处于pause或者stop时,系统可以结束 Activity,回收资源,这是Activity就是处于结束状态了。

 
处于结束状态的是Activity,如果要使用户可见,只要重启才可以。

Activity的响应时间

  当前Activity所在的线程为主线程,它的响应时间为5秒,

  如果在当前运行的Activity中进行耗时的操作且响应时间起过5秒,那么程序就会报ANR错误。

  所以,这也是不建议在Activity中写太多复杂代码的原因之一。

  当然,有些代码只能写在Activity中,不然就运行不了(它们不是生命周期方法),

  比如你想要获得android系统或者硬件一的些信息,就必须在Activity中写出来,如果单独写一个工具类获得不了。

--

相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程。


1. 启动Activity:


系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。


2. 当前Activity被其他Activity覆盖其上或被锁屏:


系统会调用onPause方法,暂停当前Activity的执行。


3. 当前Activity由被覆盖状态回到前台或解锁屏:


系统会调用onResume方法,再次进入运行状态。


4. 当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:


系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。


5.   用户后退回到此Activity:


系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。


6. 当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,

  系统内存不足,杀死当前Activity,而后用户退回当前Activity:


再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。


7. 用户退出当前Activity:


系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

  简单例子(现在也不懂     希望以后翻看这个文章的时候能懂)

package com.scott.lifecycle;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

    private static final String TAG = "LifeCycleActivity  ...>>>生命 周期 活动";
    private Context context = this;
    private int param = 1;

    // Activity 创建时被调用
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "onCreate called.    ---->>> Activity 创建时被调用");

        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                Intent intent = new Intent(context, MainActivity.class);
                startActivity(intent);
            }
        });

    }

    // Activity创建或者从后台重新回到前台时被调用
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart called.        ---->>> Activity创建或者从后台重新回到前台时被调用");
    }

    //Activity从后台重新回到前台时被调用
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart called.    ---->>> Activity从后台重新回到前台时被调用  ");
    }  

    //Activity创建或者从被覆盖、后台重新回到前台时被调用
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume called.    ---->>> Activity创建或者从被覆盖、后台重新回到前台时被调用  ");
    }  

    //Activity窗口获得或失去焦点时被调用,在onResume之后或onPause之后
    /*@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        Log.i(TAG, "onWindowFocusChanged called.");
    }*/  

    //Activity被覆盖到下面或者锁屏时被调用
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause called.        ---->>> Activity被覆盖到下面或者锁屏时被调用  ");
        //有可能在执行完onPause或onStop后,系统资源紧张将Activity杀死,所以有必要在此保存持久数据
    }  

    //退出当前Activity或者跳转到新Activity时被调用
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop called.        ---->>> 退出当前Activity或者跳转到新Activity时被调用  ");
    }  

    //退出当前Activity时被调用,调用之后Activity就结束了
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestory called.    ---->>> 退出当前Activity时被调用,调用之后Activity就结束了  ");
    }  

    /**
     * Activity被系统杀死时被调用.
     * 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死.
     * 另外,当跳转到其他Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态.
     * 在onPause之前被调用.
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putInt("param", param);
        Log.i(TAG, "onSaveInstanceState called. put param: " + param);
        Log.i(TAG, "onSaveInstanceState called. put param:        ---->>> Activity被系统杀死时被调用. ");
        super.onSaveInstanceState(outState);
    }  

    /**
     * Activity被系统杀死后再重建时被调用.
     * 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity.
     * 这两种情况下onRestoreInstanceState都会被调用,在onStart之后.
     */
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        param = savedInstanceState.getInt("param");
        Log.i(TAG, "onRestoreInstanceState called. get param: " + param);
        Log.i(TAG, "onRestoreInstanceState called. get param:     ---->>> Activity被系统杀死后再重建时被调用. ");
        super.onRestoreInstanceState(savedInstanceState);
    }  

  //当指定了android:configChanges="orientation"后,方向改变时onConfigurationChanged被调用
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.i(TAG, "onConfigurationChanged called.");
        switch (newConfig.orientation) {
        case Configuration.ORIENTATION_PORTRAIT:
            setContentView(R.layout.orientation_portrait);
            break;
        case Configuration.ORIENTATION_LANDSCAPE:
            setContentView(R.layout.orientation_landscape);
            break;
        }
    }
}

建好项目  第一次部署到手机的运行结果:

第一次  它调用了:onCreate 、onStart 和 onResume

手机   长按会主屏幕键 时 结果:

花掉了进程    重新进入

点击 button 按钮

点了一下  退出 (是退出了button 打开的页面   打开的以上一个相同的页面)

锁屏

打开屏幕   和退出

时间: 2024-10-01 13:41:23

Activity的相关文章

android Activity 的生命周期 以及横屏竖屏切换时 Activity 的状态变化

生命周期Android 系统在Activity 生命周期中加入一些钩子,我们可以在这些系统预留的钩子中做一些事情.例举了 7 个常用的钩子:protected void onCreate(Bundle savedInstanceState)protected void onStart()protected void onResume()protected void onPause()protected void onStop()protected void onRestart()protecte

Android开发之入口Activity

原文:Android开发之入口Activity Android开发之入口Activity Adnroid App是如何确定入口Activity的? 难道就因为class的类名叫MainActivity,布局文件叫activity_main.xml? 如果这样认为,就大错特错了. 之所以能够确定入口Activity,是因为在应用的清单文件中有所配置,系统会根据应用的清单文件(AndroidManifest.xml)来确立. 如何确立,标志是什么? 我们来看一下清单文件,便一目了然: 对了,系统能够

安卓性能优化之Activity和Fragment通过onSaveInstanceState()保存和恢复数据

Activity和Fragment 都有自己的生命周期,而且很类似.Fragment比Activity多了onAttach()和onCreateView()这些方法.整体它们两者是一样的周期,都会经历从创建视图( onCreate(),onCreateView(),onStart() )到暂停( onPause(), onStop() ) 到重新返回( onResume() ) 到最后销毁( onDetroyView(), onDestroy() ) 这些方法. 之前有提过,熟悉组件的这些生命周

第一章:Activity的生命周期和启动模式

Activity是Android中四大组件之首,所以需要重视,尤其是启动方式,在AndroidManifest.xml中的注册信息 (一)Activity的生命周期 1.1.1 正常情况下的生命周期 说明 (1)针对一个特定的Activity,第一次启动顺序:onCreate->onStart->onResume. (2)当用户打开新的Activity或者切换到桌面的时候,回调如下:onPause->onStop (3)返回原Activity时,回调如下:onRestart->on

abdroid的activity保存状态

package com.example.android.active; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.widget.Button; import

深入Activity,Activity启动模式LaunchMode完全解析

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53221384 本文出自[DylanAndroid的博客] 深入Activity,Activity启动模式LaunchMode完全解析 在平时的开发中,我们可能会了解到Activity的任务栈还有Activity的启动模式.那么Activity的启动模式都分别是怎么样的呢?如果设置了这些启动模式对任务栈有事么影响 ,还有就是这么启动模式在实际的开发中有什么应用呢?这里用图例和d

android内存优化-Activity, Thread引起的内存泄露0

Android编程中一个共同的困难就是协调Activity的生命周期和长时间运行的任务(task),并且要避免可能的内存泄露.思考下面Activity的代码,在它启动的时候开启一个线程并循环执行任务. 1 /** 2 * 一个展示线程如何在配置变化中存活下来的例子(配置变化会导致创 3 * 建线程的Activity被销毁).代码中的Activity泄露了,因为线程被实 4 * 例为一个匿名类实例,它隐式地持有外部Activity实例,因此阻止Activity 5 * 被回收. 6 */ 7 pu

到底是 Activity 被回收了还是进程被杀死了?

不管是安卓的官方文档还是源码注释,处处可见"从 Activity A 跳到 Activity B,当系统内存不足时 A 可能会被回收--",而且没有明确说明 A 和 B 是否属于同一个 app 或进程. 但是,在官方给的 Activity 生命周期图中,却说内存不足时低优先级的进程将被杀死. 那么,内存不足时,到底是 Activity 被回收了呢,还是进程被杀死了呢,还是二者都出现了呢? 答案是,Activity 被回收了,而且进程被杀死了,而且该进程是后台进程. 默认情况下,一个 a

android Application Component研究之Activity(一)

http://blog.csdn.net/windskier/article/details/7096521 终于下定决心写写ActivityManagerService的源码分析的文章了,ActivityManagerService 业务的整个逻辑关系被各种复杂的数据结构包裹着,因此对ActivityManagerService 的分析主要就是对各种数据结构的分析,明白了这些数据结构,理解ActivityManagerService的业务内容就水到渠成了. AMS提供了一个ArrayList

Android Activity基础详解

一.Activity简介 Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话.拍摄照片.发送电子邮件或查看地图等操作. 每个 Activity 都会获得一个用于绘制其用户界面的窗口.窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上. 一个应用通常由多个彼此松散联系的 Activity 组成. 一般会指定应用中的某个 Activity 为"主" Activity,即首次启动应用时呈现给用户的那个 Activity. 而且每个 Activity 均可启动另