`
chenjia66804610
  • 浏览: 153074 次
  • 来自: ...
社区版块
存档分类
最新评论

Activity详解

阅读更多
一 Activity的生命周期
二 让Activity变成一个窗口:Activity属性设定
三 你后台的Activity被系统回收怎么办:onSaveInstanceState


一 Activity的生命周期
和其他手机平台的应用程序一样,Android的应用程序的生命周期是被统一掌控的,也
就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习并
适应它。



简单地说一下为什么是这样:我们手机在运行一个应用程序的时候,有可能打进来电话
发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另
外系统也不允许你占用太多资源,至少要保证电话功能吧,所以资源不足的时候也就有可
能被干掉。


Activity的生命周期历经以下几个阶段:

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

protected
void onStart();

protected
void onResume();

protected
void onPause();

protected
void onStop();

protected
void onDestroy();
}


在一个Activity正常启动的过程中,他们被调用的顺序是 onCreate -> onStart -> onResume, 在Activity被干掉的时候顺序是onPause -> onStop -> onDestroy,这样就是一个完整的生命周期,但是有人问了 ,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个Activity是全屏的那么:onPause->onStop ,恢复的时候onStart->onResume,如果打断 这个应用程序的是一个Theme为Translucent或者Dialog的Activity那么只是onPause,恢复 的时候onResume。

详细介绍一下这几个方法中系统在做什么以及我们应该做什么:

onCreate: 在这里创建界面,做一些数据的初始化工作

onStart: 到这一步变成用户可见不可交互的

onResume: 变成和用户可交互的,(在activity栈系统通过栈的方式管理这些个
Activity的最上面,运行完弹出栈,则回到上一个Activity)

onPause: 到这一步是可见但不可交互的,系统会停止动画等消耗CPU 的事情
从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候
你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在

onResume里读出来,注意:这个方法里做的事情时间要短,因为下一
个activity不会等到这个方法完成才启动

onstop: 变得不可见,被下一个activity覆盖了

onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方
法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判
断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里
把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛
异常的。


onPause,onstop, onDestroy,三种状态下 activity都有可能被系统干掉
为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库)。实际工作中因为生命周 期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?因为 Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都是采用Android的消息机制 [Handler,Message]来处理多线程和界面交互的问题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟大家分享。
二 让Activity变成一个窗口:Activity属性设定

讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么很
简单你只需要设置一下Activity的主题就可以了在AndroidManifest.xml 中定义Activity的
地方一句话:

Xml代码
android:theme="@android:style/Theme.Dialog"

android:theme="@android:style/Theme.Dialog"

这就使你的应用程序变成对话框的形式弹出来了,或者


Xml代码


android:theme="@android:style/Theme.Translucent"

android:theme="@android:style/Theme.Translucent"
就变成半透明的,[友情提示-.-]类似的这种activity的属性可以在android.R.styleable类的AndroidManifestActivity方法中看到,AndroidManifest.xml中所有元素的属性的介绍都可以参考这个类android.R.styleable

上面说的是属性名称,具体有什么值是在android.R.style中可以看到,比如这个"@android:style/Theme.Dialog"就对应于android.R.style.Theme_Dialog,('_'换成'.' <--注意:这个是文章内容不是笑脸)就可以用在描述文件中了,找找类定义和描述文件中的对应关系就都明白了。


三 你后台的Activity被系统回收怎么办:onSaveInstanceState

当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B
这个时候A会执行


Java代码


public
void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong("id", 1234567890);
}

public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong("id", 1234567890);}

B 完成以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回
收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数
savedInstanceState,没被收回的就还是onResume就好了。

savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,如果正常启动onCreate就不会有它,所以用的时候要判断一下是否为空。


Java代码


if(savedInstanceState != null){
long id = savedInstanceState.getLong("id");
}

if(savedInstanceState != null){ long id = savedInstanceState.getLong("id");}

就像官方的Notepad教程里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那 个note取出来,程序就完整一些。这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦, 没准你需要记住滚动条的位置...

分享到:
评论

相关推荐

    android课件6Activity 详解

    Activity 详解 Activity 详解

    android Activity 详解

    ### Android Activity 详解 在Android应用开发中,`Activity`是四大组件之一,它负责管理用户界面,并且是用户与应用程序交互的主要入口。一个应用程序通常包含多个Activity,它们通过特定的方式进行通信和交互。 ...

    Android四大组件之Activity详解

    Android四大组件之Activity详解 Android四大组件中的Activity是最基本也是最重要的组件之一。Activity是用户与应用程序交互的入口点,负责处理用户的交互请求,并将结果返回给用户。今天,我们将深入探讨Activity...

    ViewPager加载Activity

    **ViewPager加载Activity详解** ViewPager是Android开发中一个非常重要的组件,它主要用于实现界面间的滑动切换效果,使得用户可以通过左右滑动来浏览多个视图。在Android应用设计中,ViewPager通常与Fragment配合...

    activity与activity之间的详解

    activity之间的传递数据的详解。代码简单易懂

    详解 Android 的 Activity 组件

    ### 详解 Android 的 Activity 组件 #### 概述 在Android开发中,`Activity`是四大组件之一,它是用户界面的基础单位,也是Android应用中最重要的组成部分之一。一个Android应用通常由多个`Activity`组成,每个`...

    Android四大组件之一的Activity简单介绍

    ### Android四大组件之一的Activity详解 #### 一、Activity简介 **Activity** 是 Android 开发中的四大组件之一,它提供了一个界面供用户进行交互,以完成特定的任务。每个 Activity 都是一个可视化的屏幕,上面...

    android四大组件详解

    **一、Activity详解** Activity是用户与应用交互的窗口,代表屏幕上的一个可视界面。它的生命周期包括: 1. `onCreate()`:Activity创建时调用,用于初始化界面和数据。 2. `onStart()`:Activity开始变得可见,但...

    androidAPK外部调用应用activity

    ### Android APK外部调用应用Activity详解 在Android开发中,应用程序之间通过Intent机制进行通信,这一特性使得一个应用可以启动另一个应用的组件(如Activity、Service等),从而实现跨应用的功能交互。本文将...

    android中Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)

    一、什么是Activity? 简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,都会在Manifestxml中指定一个主的Activity,如下设置 当程序第一次运行时...

    Activity和Fragment应用

    ### Activity详解 `Activity`是Android应用的核心组成部分,代表了用户可见的屏幕界面。一个`Activity`通常对应着用户界面上的一个独立任务或者功能。例如,登录界面、主屏幕或者设置页面等都可以是独立的`Activity`...

    详解教程Android开发中的Activity 组件

    ### 详解Android开发中的Activity组件 #### 概述 在Android开发中,`Activity`是四大组件之一,扮演着至关重要的角色。它负责提供用户界面并处理与用户的交互,每一个`Activity`通常对应一个屏幕。本文将深入探讨`...

    Android系统package与activity

    ### Android系统Package与Activity详解 #### 一、Package包 **Package** 在Android应用程序中扮演着至关重要的角色。它不仅定义了一个应用的基本单位,还确保了应用的独特性和可识别性。 1. **唯一性**: 每个...

    Android从入门到放弃—— 一、Activity详解1

    门——Activity(一) Activity是什么: Activity作为Andorid的四大组件之一,为用户提供了一个界面,即我们能看到的界面。相当于一张画画用的纸,我们可以在上面画任何我们想要的内容。 Activity的创建: 就像我们...

Global site tag (gtag.js) - Google Analytics