Android_Class_Activity

来源:互联网 发布:sublime的js插件 编辑:程序博客网 时间:2024/06/07 07:16

Activity extends ContextThemeWrapper

implements LayoutInflater.Factory2 Window.Callback KeyEvent.Callback View.OnCreateContextMenuListener ComponentCallbacks2


类概述

UI setContentView你窗口(视图)
        
ActivityGroup

有两种方法,几乎所有的子活动将实现


  1. onCreate(Bundle)是你初始化你的活动。布局的资源定义你的UI,并使用findViewById(int)检索在UI中你需要与编程
  2. onpause()就是你处理用户离开你的活动

这里涵盖的主题:

  • Fragments
  • Activity lifecycle
  • ConfigurationChanges
  • Starting Activities and Getting Results
  • Saving Persistent State
  • Permissions
  • Process Lifecycle

开发指南

活动类是应用程序的整体生命周期的重要组成部分,和活动的方式一起启动,并将其放在平台的应用模型的基础部分。

对于一个安卓应用程序的结构和活动的行为如何详细的角度来看,请阅读应用程序的基本面和任务和背面堆栈开发指南。


你还可以找到一个详细的讨论关于如何在活动中创建活动的开发者指南。


Fragments

从蜂窝、活动实现可以使用Fragment类更好的模块化的代码,为大屏幕创建更复杂的用户界面,帮助规模小和大屏幕之间的应用。


Activity Lifecycle

在系统中的活动作为一个活动堆栈进行管理。当一个新的活动开始时,它被放置在堆栈的顶部并成为运行活动-以前的活动始终保持在堆栈中,直到新的活动退出时,它将不会再出现前台。

An activity has essentially four states:

  • 如果一个活动是在屏幕的前景(在堆栈的顶部),它是活动的或正在运行的。
  • 如果一个活动失去了焦点,但仍然是可见的(即,一个新的非全尺寸或透明的活动都集中在你的活动的顶部),它被暂停。暂停活动是完全活的(它保持所有状态和成员信息,并保持连接到窗口管理器),但在极低的内存情况下可以被系统杀死。
  • 如果一个活动被另一个活动完全遮蔽,它就被阻止了。它仍然保留所有状态和成员信息,但是,它不再是可见的用户,所以它的窗口是隐藏的,它往往会被杀害的系统时,内存是需要其他地方。
  • 如果一个活动被暂停或停止,系统可以通过要求它完成,或者简单地杀死它的进程来降低内存的活动。当它再次显示给用户时,它必须完全重新启动并恢复到它以前的状态。
下图显示了活动的重要状态路径



有三个关键循环,你可能有兴趣在你的活动监控:

  1. 一个活动的整个生命周期发生从第一次调用onCreate(Bundle)通过一个单一的最后一次通话ondestroy()。活动将尽”的设置在oncreate()全球”的状态,并在ondestroy()释放所有剩余资源。例如,如果一个线程在后台从网络上下载数据,它可以创建线程oncreate()然后停止线程ondestroy()。
  2. 一个活动的可视电话onstart()一生直到相应的调用onstop()之间。在这个时候,用户可以看到在屏幕上的活动,虽然它可能不是在前台和用户交互。这两者之间的方法,您可以保持资源,需要显示的活动,用户。例如,你可以在onstart()登记一个BroadcastReceiver来影响你的用户界面的变化监测,并注销其onstop()当用户不再看到你的显示。的onstart()和onstop()方法可以多次调用,为活动变得可见和隐藏的用户。
  3. 一个活动的前景一生打电话onresume()直到相应的调用onpause()之间。在此期间活动是在所有其他活动的前面和与用户交互。一个活动可以经常在恢复和暂停状态之间进行,例如当设备进入休眠状态时,当一个活动结果被传递时,当一个新的意图被传递时,这些方法中的代码应该是相当轻量级的。
活动的整个生命周期由以下活动方法定义。所有这些都是钩子,当活动改变状态时,可以重写来做适当的工作。所有的活动都将实现onCreate(Bundle)做他们的初始设置;许多还将实施onpause()提交更改数据或准备停止与用户的交互。你应该打电话给你的父类在实现这些方法。

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(); } 




当所指定属性

  • 如果设备的配置(如资源配置定义的)更改,则任何显示用户界面的任何显示都需要更新以匹配该配置。因为活动是与用户进行交互的主要机制,它包括处理配置更改的特殊支持。


  • 除非你指定,否则,一配置的变化(如在屏幕的方向变化,语言,输入设备等),因为你想要去的时间流活动,通过活动的生命周期过程的正常onstop onPause(),(),()和ondestroy如适当。如果活动已经在前景或可见的用户,一次是在ondestroy(所谓的),然后一个新的实例的实例将创建一个活动,无论是生成的时间从以前的savedinstancestate onsaveinstancestate(束)。

  • 在某些特殊情况下,您可能希望通过一个或多个类型的配置更改来重新启动活动的重新启动。这是做安卓:在它的manifest属性configchanges。对于任何类型的配置的变化,你说你处理,你将收到一个电话到你的当前活动的onconfigurationchanged(配置)的方法,而不是重新启动。如果配置变化涉及任何你不处理,但活动仍将重新启动,onconfigurationchanged(配置)不叫。

启动活动,并得到结果
  1. 所述startActivity(意向)方法用于启动一个新的活动,这将被放置在活动堆栈的顶部。它采用一个参数,一个Intent,它描述了活动执行。
  2. 有时你想要得到的结果,从一个活动回来何时结束。例如,你可以开始一个活动,可以让用户选择一个人的联系人列表;它结束时,它返回所选定的人。要做到这一点,您可以调用startActivityForResult(意向,INT)与第二整数参数识别呼叫版本。结果会通过您的onActivityResult(INT,INT,意图)方法。
  3. 当一个活动退出,它可以调用的setResult(int)以后面的数据返回到它的父。它必须始终提供一个结果码,它可以是标准的结果RESULT_CANCELED,RESULT_OK,或开始RESULT_FIRST_USER任何自定义值。此外,它可任选地返回回包含它想要的任何额外数据的意图。所有这些信息似乎回到了父母的Activity.onActivityResult(),它最初提供的整数标识符一起。
  4. 如果一个子活动因任何原因(如崩溃)失败,父活动将收到的代码RESULT_CANCELED的结果。

 public class MyActivity extends Activity {     ...     static final int PICK_CONTACT_REQUEST = 0;     public boolean onKeyDown(int keyCode, KeyEvent event) {         if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {             // When the user center presses, let them pick a contact.             startActivityForResult(                 new Intent(Intent.ACTION_PICK,                 new Uri("content://contacts")),                 PICK_CONTACT_REQUEST);            return true;         }         return false;     }     protected void onActivityResult(int requestCode, int resultCode,             Intent data) {         if (requestCode == PICK_CONTACT_REQUEST) {             if (resultCode == RESULT_OK) {                 // A contact was picked.  Here we will just display it                 // to the user.                 startActivity(new Intent(Intent.ACTION_VIEW, data));             }         }     } }


保存持久状态

  • 这里一般有2种持久状态比活动将涉及:共享类似于文献的数据(通常存储在SQLite数据库使用的是内容提供商)和内部状态,如用户首选项。
对于内容提供商的数据,我们建议活动中使用一个“编辑到位”的用户模型。即,用户品牌被有效地立即进行的任何修改,而无需额外的确认步骤。支持这种模式通常是以下两条规则的一个简单的问题:

  • 当创建一个新的文件,因为它的后盾数据库项或文件立即创建。例如,如果用户选择写一个新的电子邮件,该电子邮件的一个新条目,尽快为他们开始输入数据,因此,如果他们去任何其他活动点此电子邮件后,将创建现在出现在草案的列表。
  • 当一个活动的的onPause()方法被调用,它应该致力于为后盾内容提供商或文件中的用户所做的改动。这确保了这些变化将由即将运行的任何其他活动中可以看出。你可能会想更积极地在关键时刻你的活动的生命周期中提交你的数据:开始新的活动之前,例如,整理自己的活动,在此之前,当输入字段等的用户切换


该模型的目的是防止当用户正在活动之间导航的数据丢失,并允许该系统已被暂停之后,在任何时候安全地杀死活性(因为需要系统资源的其他地方)。请注意,这意味着用户按下BACK从你的活动并不等于“取消” - 这意味着离开活性保存离开其当前内容。在活动取消的修改必须通过其他机制来提供,如明确的“恢复”或“取消”选项。


看到的内容包有关内容供应商的详细信息。这些都是不同的活动如何调用和它们之间传播数据的一个重要方面。


Activity类还提供了管理与活动有关的内部持久化状态的API。这可以用来,例如,要记得在日历(日视图或周视图),或者用户的首选初始显示在Web浏览器用户的默认主页。


活动持续状态与方法的getPreferences(INT)管理,让您检索和修改一组与活动相关的名称/值对。要使用跨多个应用程序组件(活动,接收器,服务提供商)共享的喜好,可以使用底层Context.getSharedPreferences()方法来检索对象的偏好在一个特定的名称保存。 (注意,这是不可能共享跨应用程序包的设置数据 - 为将要需要的内容提供者)。


下面是存储用户的首选视图模式,它的持久设置日历活动的摘录:

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();     } }

Permissions

当启动一个活动,你可以在设置意向和Intent.FLAG_GRANT_READ_URI_PERMISSION/或Intent.FLAG_GRANT_WRITE_URI_PERMISSION。这将授予在Intent活动访问特定的URI。访问将保持到活动结束(它仍将是整个被杀死宿主进程和其他临时破坏)。作为姜饼,如果活动已经创造了一个新的Intent被传递到onNewIntent(意向),任何新授予的权限URI将被添加到其持有现有的。

见一般权限的更多信息和安全的安全和权限的文件。


Process Lifecycle

Android系统试图保持应用程序周围尽可能长的时间,但最终会需要时内存不足移除旧的进程。如在活动的生命周期中所述,约该方法以除去决定紧密联系在一起的用户的与它相互作用的状态。在一般情况下,有四个状态的方法,可以根据在其上运行的活动,在重要性的顺序排列。它诉诸杀戮更重要的进程(第一批),系统会先杀死不太重要进程(最后的)。


  • 前台活性(在该用户当前交互的屏幕的顶部的活性)被认为是最重要的。其过程将只被杀死作为最后的手段,如果使用更多的内存比可用设备上。通常在此点装置已达到一个存储器寻呼状态,所以这是为了保持用户界面响应必需的。
  • 有形的活动(即对用户可见,但不是在前台的活动,例如一个坐在前台后面的对话),被认为是非常重要的,除非必须保持在前台运行的活动将不会被杀死。
  • 后台活动(活动是对用户不可见,并已暂停)已不再是关键,所以系统可以安全地杀死它的进程回收内存为其他前景或可见的过程。如果其进程需要被杀害,当用户返回到活动(使它显示在屏幕上再次),它的onCreate(束)方法将它的onSaveInstanceState(包)此前提供的savedInstanceState,这样可以把它称为可以重新启动它本身在相同的状态作为用户最后离开它。
  •  空进程是没有举办活动或其他应用程序组件(如服务或广播接收器类)。这些是由系统杀死非常快地存储器变低。出于这个原因,你的活动以外做任何后台操作必须在活动广播接收器和服务的上下文中执行,以确保系统知道它需要保持你的进程各地。
有时,一个活动可能需要做的独立活动周期本身存在长时间运行的操作。一个例子可能是一个摄像头应用程序,让您的图片上传到网站。上传可能需要很长的时间,应用程序应该允许用户执行时退出程序。要做到这一点,你的活动应该开始在其上载发生的服务。这允许系统的过程中进行适当的优先次序(考虑它为比其它非可见应用更为重要),用于上载的,独立的原始活性是否被暂停的持续时间,停止或结束。

概要
  • DEFAULT_KEYS_DIALER将键盘输入作为当前窗体上注册的快捷键,进行快捷键处理
  • DEFAULT_KEYS_DISABLE与(INT)setDefault键模式使用关闭键默认处理。
  • DEFAULT_KEYS_SEARCH_GLOBAL 与setDefault键模式(INT)使用指定未处理的按键将启动一个全局搜索(通常是网页搜索,但一些平台可以定义为全局搜索替代方法)
    见android.app.SearchManager了解更多详情。
  • DEFAULT_KEYS_SEARCH_LOCAL 与(INT)setDefault键模式使用指定未处理的按键将启动一个应用程序定义的搜索。
  • DEFAULT_KEYS_SHORTCUT 与(INT)setDefault键模式用来执行默认按键处理菜单快捷方式。
  • RESULT_CANCELED 标准活动结果:操作取消。   
  •    RESULT_FIRST_USER 启动的用户定义活动的结果。
  • RESULT_OK       标准活动结果:操作成功。

继承的常量

  •      ACCESSIBILITY_SERVICE 与getSystemService(类)用于检索AccessibilityManager通过已注册的事件监听器给了UI事件的用户反馈。
  •  ACCOUNT_SERVICE  与getSystemService(类)用于获取一个客户经理在您选择的时间接受意图。









0 0