StupidBeauty
Read times:1381Posted at: - no title specified

安卓21开发文档翻译:活动,Activity

继承  ContextThemeWrapper
实现 LayoutInflater.Factory2 Window.Callback KeyEvent.Callback View.OnCreateContextMenuListener ComponentCallbacks2

类概述

活动, 指的是,用户 可以集中精力做的一件单独的事。几乎所有 的活动都会与用户进行交互,所以, Activity 类会为妳创建一个窗口,让妳可以通过 setContentView(View) 来将妳的界面放置于其中。尽管活动通常 被显示为全屏的窗口,但是 ,它们 也可以其它形式呈现:显示 为浮动窗口(使用 一个设置了 windowIsFloating 标志位的主题 )或者被嵌入到另一个活动中(使用  ActivityGroup )。 有两个方法,是几乎Activity 的所有子类都要实现的:

  • •. onCreate(Bundle) ,妳应当在此处初始化妳的活动。 最重要的是, 妳通常会在这里调用 setContentView(int) ,并且传入一个用来定义妳的界面的布局资源,并且使用 findViewById(int) 来找到那个界面 中的各个部件, 以便日后通过代码来与它们交互

  • •. onPause() 在此处,做那些当用户离开妳的活动时要进行的处理。 最重要的是,用户 所做出的任何变更,都应当在此时 被提交(通常 是提交到储存着 这份数据的那个 ContentProvider )。

为了让 Context.startActivity() 能够正常执行,所有 的活动类 必须在软件包的 AndroidManifest.xml 文件中有一个对应的 <activity> 声明。

此文档将讲述以下主题:

  1. 1. 片断

  2. 2. 活动 的生命周期

  3. 3. 配置 改变

  4. 4. 启动活动 以及获取结果

  5. 5. 保存持久状态

  6. 6. 权限

  7. 7. 进程 的生命周期

开发者指南

Activity 类是 一个应用程序的整个生命周期中的一个重要部分,并且 ,活动 的启动和组织方式 也是安卓平台的应用程序模型的一个基本组成部分。欲知安卓应用程序 的详细结构,以及活动的行为,则,请阅读 应用程序基础 任务 和后退栈 开发者指南。

另外 ,在 活动 开发者指南中,还有一篇关于如何创建活动 的详细说明文档。

片断

HONEYCOMB 开始 就可以在 Activity实现代码 里使用 Fragment 类, 有以下好处: 可将代码更好地模块 化;针对较大 的屏幕构建更强大的用户界面;使得应用程序能够兼容 小屏幕和大屏幕。

活动的生命周期

系统 中的活动是以 一个 活动栈 的形式管理的。 当一个新活动被启动时, 它会被放置到栈的顶端,并且成为当前 的运行中活动——之前 的那个活动将保持在栈中当前活动的下面,并且,只有 在新的活动退出之后 ,它才会再次来到前台。

作为一个活动,有4种状态:

  • •. 如果 一个活动处于屏幕的前台( 在栈的顶端 ),则,它的状态是 活跃 运行

  • •. 如果 一个活动已经失去焦点但是仍然可见( 也就是说, 有一个新的非全尺寸的或者透明的活动覆盖 了妳的活动并且获得了焦点 ),则, 它处于 暂停 状态 一个处于暂停状态的活动是完全处于存活状态的( 它会保有自己的所有状态数据和成员信息 ,并且保持 与窗口管理器的关联状态 ),但是, 当系统的内存严重不足时,该活动是可能会被系统杀死的。

  • •. 如果 一个活动被另一个活动完全遮挡住,则,它处于 停止 状态。 它仍然保有它的所有状态数据和成员信息,但是, 它已经不可见 ,所以 它的窗口被隐藏了,并且 它会经常因为别处需要内存 而被系统杀死。

  • •.如果一个活动处于暂停或停止状态,则,系统可能会将它从内存中除去,系统可能会要求它结束运行或者直接杀死它的进程。当它被再次显示在用户面前时,它必须被完全重启,并且恢复为之前的状态。

图显示了一个Activity 的重要的状态变更路径。矩形框代表的是Activity 在不同状态间变更时会调用的回调方法,妳可以实现它们来做出相应的处理。带颜色的椭圆,表示该Activity 可能处于的主要状态。

在妳的活动中,妳可能需要监视三个关键循环:

  • •. 活动 整个生命周期 从第一次调用 onCreate(Bundle) 到最后的唯一一次调用 onDestroy() 一个活动会在onCreate()中进行它的所有的“全局”状态的初始化, 并在onDestroy()中释放 其持有的 所有资源 。例如,假设活动 有一个后台线程用来 从网络下载数据,则, 可以在onCreate()中创建那个线程,日后 再在onDestroy()中停止那个线程。

  • •. 活动 可见生命周期 从对 onStart() 的调用直到相应的对 onStop() 的调用。 在这段时间里,用户 可以在屏幕上看到这个活动, 当然, 它可能并不是处于前台状态 与用户进行交互。 在这两个方法的调用之间, 妳可以维护那些 在显示活动的过程中所需要的资源。例如, 妳可以在onStart()中注册一个 BroadcastReceiver 以监听那些会影响到妳的界面的变更, 并在onStop() 中解除注册,因为那个时候用户已经 看不到妳显示的东西了。onStart() 和onStop()方法可能会随着 该活动的显示和隐藏而多次被调用。

  • •. 活动 前台生命周期 从对 onResume() 的调用直到相应的对 onPause() 的调用。 在这段时间内, 该活动 是位于所有其它活动 的前面,并且正在与用户进行交互。 一个活动可能会频繁地在继续和暂停状态之间变换——例如,设备进入睡眠状态 、某个活动结果 被传递、某个新的意图被传递——所以 ,这两个方法中的代码应当写得尽量精简。

一个活动的整个生命周期是由以下的Activity 方法来定义的。 这些方法都是钩子, 妳可以覆盖它们 ,以在活动的状态发生变化时做一些适当的工作。所有 的活动都会实现 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 ();

}

一般情况下,一个活动的生命周期的变化是像下表这样的:

方法

说明

可杀死?

下个方法

onCreate()

当活动被第一次创建时,会调用此方法。妳应当在此处进行所有的普通的静态初始化:创建视图、将数据绑定到列表、等等。这个方法中,还会传入一个Bundle,如果妳的活动在之前有被冻结的状态,则,这个Bundle 中会包含有该状态的信息。

后续一定会跟一个 onStart()

onStart()

onRestart()

在妳的活动被停止之后,下次启动之前调用。

后续一定会跟一个 onStart()

onStart()

onStart()

当该活动即将显示给用户看时,会调用此方法。

如果该活动最终显示在前台,则后续会调用一个 onResume() ,如果该活动最终被隐藏,则后续会调用一个 onStop()

onResume() onStop()

onResu me()

当该活动即将开始与用户交互时,调用该方法。在这个时候,妳的活动已经处于活动栈的顶端了, 用户的输入会被它接收。

后续的调用一定是 onPause()

onPause()

onPause()

当系统准备重新切换到之前的某个活动时,会调用此方法。这个方法,一般用于,将未保存的变更提交到持久数据存储中、停止动画和其它会耗用CPU的事情、等等。这个方法应当尽可能的精简,因为,在这个方法退出之后,下个活动才会被激活。

如果该活动重新进入前台,则后续会调用 onResume() ;如果该活动变得不可见,则后续会调用 onStop()

HONEYCOMB 之前 的系统中可杀死

onResume() onStop()

onStop()

当另一个活动被激活并且覆盖了此活动,使得它不再可见时,会调用此方法。以下事情都可能引起此方法被调用:一个新的活动被启动;一个已有的活动被放置到此活动的前面;或者,此活动本身被销毁。

如果此活动又重新进入前台与用户交互,则后续会调用 onRestart() ;如果此活动从此被销毁,则后续会调用 onDestroy()

onRestart() onDestroy()

onDestroy()

在妳的活动被最终销毁之前,能够收到的最后一个调用。有两种原因会引起这个:该活动自身正在结束(有人对它调用 finish() );或,系统临时销毁该活动的这个实例,以节省空间。妳可以使用 isFinishing() 方法来区分这两种情况。

注意 上表中的“可杀死?”一列——对于那些 被标记为可杀死 的方法 当它们返回之后,系统可能 在任何时候 杀死它们所在的进程,而不给它们机会再执行任何一句代码。因为 这一点,妳应当使用 onPause() 方法 来将需要保存的数据(例如用户编辑的内容)写到存储器中。另外 ,在将该活动置于这样一个后台状态之前,会调用 onSaveInstanceState(Bundle) 方法, 这样,妳就可以将 该活动中的那些动态实例状态保存 到指定的Bundle 中 以便在日后该活动需要被重新创建时 onCreate(Bundle) 中读取这些状态。阅读 进程生命周期 小节 ,以了解,进程 的生命周期是如何与它所容纳的活动 相关联起来的。注意 ,有一点狠重要,应当 onPause() 中保存持久数据,而不是在 onSaveInstanceState(Bundle) 中, 因为,后者 并不是生命周期中的回调函数,因而不一定在每个场景下都会被调用,这一点也在其文档中说明了。

注意 ,对于 HONEYCOMB 开始的平台和之前的平台来说, 这里的语义稍微有点不同。 从Honeycomb 开始, 一个应用程序只有在其 onStop() 方法返回之后才会进入可杀死状态。 这个会影响到 onSaveInstanceState(Bundle) 可能 被调用的时间( 可在 onPause() 后安全地被调用 ),并且允许 一个应用程序安全 地等到 onStop() 再保存持久状态。

对于那些 未被标记为可杀死的方法, 从该方法被调用开始,该活动的进程就不会 被系统杀死,并 在该方法返回之后仍然保持这样一个状态。因此 ,举个例子, 在它的 onPause() 被调用之后直到 onResume() 被调用之前的时间里,是处于可杀死状态的。

配置变更

如果设备 的配置( Resources.Configuration 类定义 )发生变更,则,任何 一个显示了用户界面的东西都要进行相应的更新以匹配新的配置。因为 Activity 是与用户进行交互的首要机制,所以, 它包含了对于配置变更进行处理的特殊支持。

除非 妳另外指定,否则,配置变更 (例如屏幕朝向 发生变化、语言发生变化 、输入设备发生变化等等 )会引起妳的当前活动 销毁 ,并且相应 地度过 onPause() onStop() onDestroy() 这样的标准活动生命周期。如果 该活动之前处于前台状态,或者对于用户是可见的,则, 该实例的 onDestroy() 会被调用,然后 该活动的一个新实例 会被创建,并且 将之前实例中通过 onSaveInstanceState(Bundle) 生成的savedInstanceState 传入。

为什么会这样呢,因为,应用程序相关的资源,包括布局文件,都会因为配置值的改变而改变。因此,唯一一个安全地处理配置变更的方式就是,重新获取所有的资源,包括布局、绘图对象和字符串。因为活动都知道如何保存自身的状态并且日后根据该状态来重新创建自身,所以,这是一个让活动以新的配置来重启自身的方便的手段。

在某些特殊情况下, 妳可能想要避免 在特定类型的配置变更下重启妳的活动。 这是利用清单文件中的 android:configChanges 属性 来实现的。对于 妳宣称自己能够处理的任何类型 的配置变更, 妳的活动的 onConfigurationChanged(Configuration) 方法都会被调用, 而不是简单地重启它。如果某个配置变更 中包含着妳不处理的事件,则,该活动仍然会被重启,而不会调用 onConfigurationChanged(Configuration)

启动活动并且获取结果

startActivity(Intent) 方法 就是用来启动一个新活动的, 被启动的新活动会被放置于活动栈的顶端。 它需要一个单独的参数,即一个 Intent ,这个参数说明了要被执行的活动的相关信息。

有些时候, 妳需要在某个活动结束之后获取到它的返回信息。例如, 妳可以启动一个活动,它让用户从联系人列表中选择一个联系人; 当它结束时, 会返回用户所选择的联系人。 要做到这一点的话,妳需要调用 startActivityForResult(Intent, int) ,其中 的第二个参数是一个整数,用来唯一区分这次调用。 结果会通过妳的 onActivityResult(int, int, Intent) 方法返回给妳。

当一个活动退出时,它可以调用 setResult(int) 来将数据返回给它的亲代活动。 它必须提供一个结果码, 该结果码可以是标准 的结果码RESULT_CANCELED、RESULT_OK,也可以是 从RESULT_FIRST_USER 开始的任意自定义值。另外 ,它还可以可选地返回 一个Intent,其中包含着它想返回的额外数据。 这些信息,以及最初提供 的整数标识符,都会被返回给亲代活动的 Activity.onActivityResult() 方法。

如果子代活动因为某种原因而运行失败(例如崩溃),则,亲代活动接收到的结果中会包含一个结果码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 ) {

// 当用户按中键时,让他/她们选择一个联系人。

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 ) {

// 选择 了一个联系人。此处 ,我们直接显示它。

startActivity ( new Intent ( Intent . ACTION_VIEW , data ));

}

}

}

}

保存持久状态

一般来说,一个活动会与两种持久状态打交道:共享 的文档类型的数据( 一般是使用一个 内容提供 保存到 SQLite 数据库中去的 和内部的状态,例如用户的首选项。

对于内容提供者类型的数据,我们建议,活动应当使用一种“就地编辑”用户模型。也就是说,用户所做的任何修改,都是立即生效的,而不需要再做一步额外的确认操作。要支持这种模式,只需要简单地应用以下两条规则:

  • •.在创建一个新文档时,应当立即创建背后对应的数据库条目或文件。例如,当用户开始编写一封新邮件时,应当在用户开始输入数据时就立即创建与该邮件对应的新条目,这样,如果他/她们在那个时间点之后切换到别的活动,则,这封邮件会出现在草稿列表中。

  • •. 当活动的 onPause() 方法被调用时, 它应当 将用户做出的改变提交到背后的内容提供者或文件。 这样,能够确保,即将启动 的其它活动 都能够看到该变更。 妳甚至可能想要在活动的生命周期中的关键时刻更积极地提交数据:例如, 在启动一个新活动之前,在关闭妳自己的活动之前, 当用户在不同输入字段之间切换之时,等等。

设计 此模型的目的:阻止由于用户 在不同活动之间切换而引起的数据丢失;并且 ,允许 在一个活动被暂停之后,安全 地杀死该活动(因为系统 中别处需要资源 )。注意 ,这就意味着, 当用户在妳的活动中按下 后退 键时, 并不 表示"取消"—— 而是表示,离开当前活动,并且 将它当前的内容保存。 要想在活动中提供取消编辑内容的功能的话,必须以别的方式来进行,例如, 一个明确的"恢复"或"撤销"选项。

阅读 content ,以了解关于内容提供者的更多信息。 这个包文档里面说明的是,不同的活动之间如何互相传递数据

Activity类还提供了一个API,用来管理与一个活动相关联的内部持久状态。这可用来做狠多事,例如:记住用户在一个日历中选中的首选默认视图(日视图还是周视图);或者,记住一个网页浏览器中的默认首页。

活动 的持久状态是通过 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 ();

}

}

权限

可在清单文件的 <activity> 标记中声明某个Activity 的时候,指定要启动它时所必须具有的权限。 这样做了之后,其它 的应用程序要想启动该活动,就必须在它们自己的清单文件 中声明一个对应的 <uses- permission> 元素

当妳启 某个Activity 时, 可以 在对应的Intent 上 设置 Intent.FLAG_GRANT_READ_URI_PERMISSION 和/或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION 这会向该Activity 赋 能够访问到 该Intent 中指定URI的权限。 该权限会保持有效,直到该Activity 结束为止(即使容纳 它的那个进程被杀死,以及发生其它临时 的销毁事件,该权限也会保持 )。 GINGERBREAD 开始,如果 Activity已经 被创建了,并且 新的Intent 被通过 onNewIntent(Intent) 传递给它了,则, 新赋予的URI 权限都会被追加到它已 有的权限中。

参考 安全 性和权限 文档 ,以了解关于一般的权限和安全问题的更多信息。

进程生命周期

安卓系统 会尽可能地维持应用程序进程的存活,但是, 当内存不足时,终将需要关闭 旧的进程的。 活动 的生命周期 中已经说明过,关于 要关闭哪个进程,这个决定,是 与用户 各个进程的交互状态密切相关的。 一般来说,根据运行 于其中的活动的状态,一个进程有4种状态,以下按照重要性从高到低的顺序排列。系统 会优先杀死重要 性较低的进程( 排在后面的进程 ),再杀死重要性较 的进程(排在前面 的进程 )。

  1. 1. 前台活动(显示在屏幕最前面,正在与用户交互)被认为是最重要的。它的进程只会在最后被杀死,当它用了超过设备本身内存数量的内存时,被杀死。一般地,到了这种状态时,设备已经处于一种内存分页状态了,所以必须杀死这个活动,以保持用户界面能够继续对用户进行响应。

  2. 2. 可见活动(一个可见却并不处于前台状态的活动,例如,被一个前台对话框部分遮挡的活动)被认为是非常重要的,除非是为了确保前台活动正常运行,不然是不会被杀死的。

  3. 3. 后台活动 ( 一个不可见并且已被暂停的活动 ) 就不 是重要活动了,所以 ,系统 可以为了 给其它前台或可见进程腾出内存而安全地杀死它的进程。如果 它的进程需要被杀死的话,则, 当用户重新切换 到该活动(使得 它又在屏幕上可见 )时, 它的 onCreate(Bundle) 方法 会被调用 ,并且会传入它之前在 onSaveInstanceState(Bundle) 中提供的savedInstanceState, 这样, 它就可以以用户上次离开它时的相同状态 来重新启动了。

  4. 4. 空白进程 是一个不包含活动或其它应用程序组件(例如 Service BroadcastReceiver )的进程。 当内存不足时,系统会狠快杀死这种进程。因此 ,对于任何 一个需要在活动之外进行 的后台操作, 都必须让它在一个活动BroadcastReceiver 或Service 的上下文中执行, 以确保,系统知道 它应当保持 妳的进程存活。

有些时候,一个 Activity可能需要进行 一个独立于活动的生命周期之外的长时间的操作。 举个例子, 一个 可将照片上传到网站的相机应用 上传过程可能会花狠长时间, 而该应用程序应当允许用户 在上传仍在进行时离开该应用程序。 为了实现这一点,妳的 Activity应当启动 一个 Service ,用来上传照片。 这样,系统 就能够适当地调整妳的进程在上传期间的优先级(认为 它比其它不可见的应用程序更重要 ),并且 不用关心原始活动是暂停了、停止了还是终止了。

公有方法

public void  dump  ( String  prefix,  FileDescriptor  fd,  PrintWriter  writer,  String[]  args)

自此版本开始引入 应用编程接口级别11

将此Activity 的状态输出到指定的流中。如果妳执行"adb shell dumpsys activity <activity_component_name>",就会调用此方法。

参数

prefix

要加在每行输出内容之前的前缀。

fd

要将此转储内容发送到其中的原始文件描述符。

writer

妳应当向其转储状态的PrintWriter。当妳返回时,会为妳关闭它。

args

对于该转储请求的额外参数。

public final  Application getApplication  ()

自此版本开始引入 应用编程接口级别1

返回拥有着本活动的那个应用程序。

public final boolean  isChild  ()

自此版本开始引入 应用编程接口级别1

此活动是否是嵌入到另一个活动中了?

public boolean isFinishing ()

自此版本开始引入 应用编程接口级别1

做出检查, 此活动是否正处于关闭的进程中, 有两种原因会使它处于关闭进程中: 妳对它调用了 finish() ;或,别处的某个代码请求它关闭了。通常 onPause() 中使用这个方法,来检查, 此活动只是暂停了还是正在整个地关闭。

返回
  • •.如果该活动正在关闭,则返回真(true);否则返回假(false)。

参考

public void  onLowMemory  ()

自此版本开始引入 应用编程接口级别1

在以下情况下,会调用此方法:整个系统的内存不足了,并且当前活跃运行的进程应当减少它们的内存使用情况。尽管对于此方法被调用的准确时间没有定义,但是,一般来说,在所有后台进程被杀死之后,会调用此方法。也就是说,在杀死那些我们想要避免被杀死的容纳了服务和前台界面的进程之前,会调用此方法。

妳应当实现此方法,以释放那些正被妳所保有的缓存或其它不必要的资源。在妳的这个方法返回之后,系统会为妳做一次垃圾收集。

更好 的做法是,实现 ComponentCallbacks2 中的 onTrimMemory(int) ,以便在不同的内存警告级别上渐进式地释放资源。那个 API 只在应用编程接口级别14 及更高版本上可用,所以 在较旧的系统中,妳应当 使用 onLowMemory() 作为 一个备选方法, 它可被认为等价于以 TRIM_MEMORY_COMPLETE 级别来调用 onTrimMemory(int)

public void  onTrimMemory  (int level)

自此版本开始引入 应用编程接口级别14

当操作系统认为现在是一个合适的时机来让某个进程释放不必要的内存时,就会调用此方法。例如,当此活动进入后台,而设备上已没有足够多的可用内存来维持这么多的后台进程运行的时候,就会调用此方法。妳不应当对级别level 的值进行准备的比较,因为,日后可能加入更多的中间值——一般地,妳只需要比较一下该值是否大于或等于妳所感兴趣的值就行了。

要想在任何时候得知 本进程的内存释放级别,则,可调用 ActivityManager.getMyMemoryState(RunningAppProcessInfo)

参数

level

内存释放 的上下文,对于应用程序应当作出 的内存释放量给出了一个建议。可选 值: TRIM_MEMORY_COMPLETE TRIM_MEMORY_MODERATE TRIM_MEMORY_BACKGROUND TRIM_MEMORY_UI_HIDDEN TRIM_MEMORY_RUNNING_CRITICAL TRIM_MEMORY_RUNNING_LOW TRIM_MEMORY_RUNNING_MODERATE

public final void  runOnUiThread  ( Runnable  action)

自此版本开始引入 应用编程接口级别1

在用户界面线程中运行指定的动作。如果当前线程就是用户界面线程,则,该动作会被立即执行。如果当前线程不是界面线程,则,该动作会被发送到界面线程的事件队列中。

参数

action

要在界面线程中运行的动作

public void  setContentView  ( View  view)

自此版本开始引入 应用编程接口级别1

将此活动的内容设置为某个特定的视图。 该视图会被直接放置到 此活动的视图树中。 它本身可以是一个复杂的视图树。 在调用此方法时, 该视图的布局参数会被忽略。 该视图的宽度和高度都会默认设置为 MATCH_PARENT 要使用妳自定义的布局参数,则,调用 setContentView(android.view.View, android.view.ViewGroup.LayoutParams)

参数

view

要显示的内容。

参考

public void setContentView (int layoutResID)

自此版本开始引入 应用编程接口级别1

将某个布局资源设置为活动的内容。该资源会被实例化,并且将其中的所有顶级视图添加到此活动中。

参数

layoutResID

要实例化的资源编号。

参考

public final void  setProgress  (int progress)

自此版本开始引入 应用编程接口级别1

设置标题栏中进度条的进度。

要想显示进度条,需要通过 requestWindowFeature(int) 来请求启用这个特性。

参数

progress

进度条的进度值。有效范围是010000 (包含两者)。如果设置的进度值为10000,则,进度条会走满,并且会淡出。

public final void setProgressBarVisibility (boolean visible)

自此版本开始引入 应用编程接口级别1

设置标题栏中的进度条的可见性。

要想显示进度条,需要通过 requestWindowFeature(int) 来请求启用这个特性。

参数

visible

是否要在标题栏中显示进度条。

public final void setResult (int resultCode)

自此版本开始引入 应用编程接口级别1

调用这个方法,以设置妳的活动要向其调用者返回的结果。

参数

resultCode

要向之前的活动回传的结果码,通常是RESULT_CANCELED 或RESULT_OK

参考

public final void  setResult  (int resultCode,  Intent  data)

自此版本开始引入 应用编程接口级别1

调用这个方法,以设置妳的活动要向其调用者返回的结果。

GINGERBREAD 开始, 妳在此提供的 Intent 中可以设置 Intent.FLAG_GRANT_READ_URI_PERMISSION 和/或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION 这将会给接收到此结果的那个Activity 赋予对于Intent 中指定URI的访问权限。 该权限会保持有效,直到该Activity 结束为止(即使容纳 它的那个进程被杀死,以及发生其它临时 的销毁事件,该权限也会保持 )。 并且 新赋予的URI 权限都会被追加到它已 有的权限中。

参数

resultCode

要向之前的活动回传的结果码,通常是RESULT_CANCELED 或RESULT_OK

data

要向之前的活动回传的数据。

参考

public final void setSecondaryProgress (int secondaryProgress)

自此版本开始引入 应用编程接口级别1

设置标题 栏中进度条的附属进度值。 这个进度值会 被绘制在 主进度条(使用 setProgress(int) 设置 其进度值 )和背景之间。 这个,对于与多媒体相关的功能狠有用,例如, 这个进度条用于显示缓冲进度,而主进度条用于显示播放进度

要想显示进度条,需要通过 requestWindowFeature(int) 来请求启用这个特性。

参数

secondaryProgress

进度条的附属进度值。有效范围是0到10000 (包含两者)。


Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4