Activity和Task的基本模型

一、基础知识
一个Activity可以启动另一个Activity,即便是定义在不同应用程序中的Activity。例如,假设你想让用户显示一些地方的街景。
而这里已经有一个Activity可以做到这一点,因此,你的Activity所需要做的只是在Intent对象中添加必要的信息,并传递给startActivity()。
地图浏览将会显示你的地图。当用户按下BACK键,你的Activity会再次出现在屏幕上。
对于用户来说,看起来好像是地图浏览与你的Activity一样,属于相同的应用程序,即便是它定义在其它的应用程序里,并运行在那个应用程序的进程里。
Android通过将这两个Activity保存在同一个Task里来体现这一用户体验。简单来说,一个Task就是用户体验上的一个“应用”。
它将相关的Activity组合在一起,以stack的方式管理。用Activity启动Task的一典型就是用户在应用程序启动栏中选择一个Activity。
位于stack顶端的Activity是当前正在运行的——能够聚焦用户的动作。当一个Activity启动另一个新的Activitys时,新的Activity将运行,成为前端Activity,并压入stack。
之前的Activity仍保留在stack中。当用户按下BACK键,当前的Activity从stack中退出,之前的那个Activity,将重新运行,成为前端Actiivity。
<wbr style="line-height:25px">注意</wbr><wbr style="line-height:25px">1:<span style="color:#000080; line-height:25px">一个task并不是对应一个线程,实际上一个task可以包含多个进程。<br style="line-height:25px"> 一个Task中可能有多个同一个Activity的实例时(如多个地图浏览)。<br style="line-height:25px"> 一个Task就是一组Activity,不是一个类或者在manifest中定义的一个元素。Task的属性值是由根Activity决定的(即由Task的第一个Activity设置)。例如Task的“affinity”;那个值就是从Task中的根Activity中读取的。</span><br style="line-height:25px"> Task中的所有Activity作为一个单元一起移动。整个Task(整个Activitystack)可以进入前台或者退到后台。<br style="line-height:25px"> 例如,假设当前Task 中的<span style="color:#0000ff; line-height:25px">stack A</span>中有4个Activity——3个位于当前<span style="color:#0000ff; line-height:25px">Activity A</span>下方。用户按下HOME键,进入到应用程序启动栏,<br style="line-height:25px"> 然后选择一个新的<span style="color:#0000ff; line-height:25px">应用程序B</span>(实际上,一个新的Task,暂命名为<span style="color:#0000ff; line-height:25px">Task B</span>),假设它启动<span style="line-height:25px; color:rgb(0,0,255)">Activity B</span>。当前Task退到后台,并且新Task中的根Activity会显示出来。<br style="line-height:25px"> 然后,经过一段时间后,用户回到Home画面,然后再次选择前一个<span style="color:#0000ff; line-height:25px">应用程序A</span>(前一个Task)。<br style="line-height:25px"> 那个拥有4个Activity的<span style="color:#0000ff; line-height:25px">Task A</span>会进入前台。当用户按下BACK键,屏幕不会显示用户刚刚离开的<span style="color:#0000ff; line-height:25px">Activity B</span>(前一个Task的根<span style="color:#0000ff; line-height:25px">Activity B</span>)。<br style="line-height:25px"> 而是,这个<span style="color:#0000ff; line-height:25px">stack A</span>中的顶端Activity移除,相同Task中的前一个Activity会显示出来。<br style="line-height:25px"> 刚才描述的行为是Activity和Task的默认行为。但有方法来完全改变它。Task之间的关联和Task中的Activity行为,受启动Activity的Intent对象中设置的Flag和manifest文件中Activity的&lt;activity&gt;元素的特性值交互控制。调用者和响应者都有权决定如何发生。<br style="line-height:25px"> 注意:可以在Activity中通过getTaskId()得到它所在task的Id<span style="color:#993300; line-height:25px"><br style="line-height:25px"></span><wbr style="line-height:25px"><span style="line-height:25px">二、Affinity和新Task</span><wbr style="line-height:25px"><br style="line-height:25px"> 默认情况下,一个应用程序中(APK)的所有Activity都有相同的affinity(即manifest中的package名)<br style="line-height:25px"> 然而,每个Activity都可以在&lt;activity&gt;元素的taskAffinity特性上设置<span style="color:#000080; line-height:25px"><wbr style="line-height:25px">单独的值<wbr style="line-height:25px">。</wbr></wbr></span><br style="line-height:25px"><span style="line-height:25px">例如</span>:<br style="line-height:25px"><span style="color:#3366ff; line-height:25px">&lt;activityandroid:name=".HelloActivity"<br style="line-height:25px"> android:label="@string/app_name"<br style="line-height:25px"> android:taskAffinity="com.teleca.robin.taskAffinity1"&gt;&gt;<br style="line-height:25px"> &lt;intent-filter&gt;<br style="line-height:25px"> &lt;actionandroid:name="com.teleca.robin.Hello"/&gt;<br style="line-height:25px"> &lt;categoryandroid:name="android.intent.category.DEFAULT"/&gt;<br style="line-height:25px"> &lt;/intent-filter&gt;<br style="line-height:25px"> &lt;/activity&gt;</span><br style="line-height:25px"> 在程序中可以通过如下的方式得到:<br style="line-height:25px"><span style="color:#3366ff; line-height:25px">IntentmainIntent=newIntent("com.teleca.robin.Hello",null);<br style="line-height:25px"> mainIntent.addCategory("android.intent.category.DEFAULT");<br style="line-height:25px"> List&lt;ResolveInfo&gt;apps;<br style="line-height:25px"> apps=getPackageManager().queryIntentActivities(mainIntent,0);<br style="line-height:25px"> if(apps==null)<br style="line-height:25px"> System.out.println("noacitivityisfind");<br style="line-height:25px"> for(inti=0;i&lt;apps.size();i++)<br style="line-height:25px"> {<br style="line-height:25px"> ActivityInfoa=apps.get(i).activityInfo;<br style="line-height:25px"> System.out.println(a.name+"taskAffinity:"+a.taskAffinity);<br style="line-height:25px"> }</span> <div style="line-height:25px">判断是否是Task的根和得到taskId可以Activity的<span style="color:#ff6600; line-height:25px">isTaskRoot()</span>方法和<span style="color:#ff6600; line-height:25px">getTaskId()</span>用如下的方法<span style="color:#3366ff; line-height:25px">:</span> </div> <div style="line-height:25px"><span style="line-height:25px; color:rgb(51,102,255)"></span></div> <div style="line-height:25px"> <span style="color:#3366ff; line-height:25px">text.setText("is TaskRoot:"+isTaskRoot()+"this is the No "+(id++)+"Hello"+"task id:"+this.getTaskId());<br style="line-height:25px"></span>定义在不同应用程序中的Activity可以共享同一个affinity,或者定义在同一个应用程序中的Activity设置不同的affinity。<br style="line-height:25px"> Affinity在两种环境下工作:Intent对象包含<span style="color:#ff6600; line-height:25px">FLAG_ACTIVITY_NEW_TASK</span>标志,和Activity的<span style="color:#ff6600; line-height:25px">allowTaskReparenting</span>特性设置为“true”。<br style="line-height:25px"><wbr style="line-height:25px"><span style="color:#ff00ff; line-height:25px">FLAG_ACTIVITY_NEW_TASK</span><br style="line-height:25px"> 一个Activity一般通过调用startActivity()启动并加入到Task中。它同调用者一样,进入同一个Task。<br style="line-height:25px"> 然而,如果传递给startActivity()的Intent对象中包含FLAG_ACTIVITY_NEW_TASK时,系统会搜索一个新的Task来容纳新的Activity。<br style="line-height:25px"> 通常,如标志的名字所示,是一个新的Task。然而,并不是必须是。如果已经存在一个Task与新Activity的affinity相同,这个Activity就会加入到那个Task中。如果不是,启动一个新的Task。<br style="line-height:25px"> 如果启动它的acitve和新Activity的affinity相同,那么新Activity的会进入启动它的acitve所在的Task.<br style="line-height:25px"><span style="color:#ff00ff; line-height:25px">allowTaskReparenting</span><br style="line-height:25px"> 如果一个Activity的allowTaskReparenting特性设置为“true”,它就能从启动的Task中移到有着相同affinity的Task(这个Task进入到前台的时候)。<br style="line-height:25px"> 例如,在一个旅游的程序中定义了一个可以报告选择城市的天气情况的Activity。它和同一个应用程序的其它Activity一样,有着相同的Affinity(默认的Affinity),并且它允许重新宿主。<br style="line-height:25px"> 你的Activity中的一个启动了天气预报Activity,因此,它初始化到和你Activity相同的Task中。<br style="line-height:25px"> 如果旅游应用程序当前没被启动,那么下次它被启动时,天气预报那个Activity将会被显示(即在旅游应用程序的Task中被显示)。<br style="line-height:25px"> 如果从用户的角度,一个.apk文件包含多个“应用”的话,你可能希望为关联的Activity设置不同的affinity。<br style="line-height:25px"><wbr style="line-height:25px"><span style="color:#ff00ff; line-height:25px">LaunchMode</span><wbr style="line-height:25px"><br style="line-height:25px"> 这里4种不同的启动模式可以设置到&lt;activity&gt;元素的launchMode特性上:<br style="line-height:25px"><wbr style="line-height:25px"><span style="color:#ff00ff; line-height:25px">standard(默认模式)<wbr style="line-height:25px"><br style="line-height:25px"><wbr style="line-height:25px">singleTop<wbr style="line-height:25px"><br style="line-height:25px"><wbr style="line-height:25px">singleTask<wbr style="line-height:25px"><br style="line-height:25px"><wbr style="line-height:25px">singleInstance</wbr></wbr></wbr></wbr></wbr></wbr></span><wbr style="line-height:25px"><br style="line-height:25px"><span style="line-height:25px"><wbr style="line-height:25px">注意</wbr></span><wbr style="line-height:25px">1:对于singleTask,如果新的Activity和旧的Activity的affinity一样时,这时它相当于FLAG_ACTIVITY_NEW_TASK。<br style="line-height:25px"><span style="line-height:25px"><wbr style="line-height:25px">注意</wbr></span><wbr style="line-height:25px">2:对于singleTask和singleInstance的affinity最好不要和别的task的affinity相冲突。<br style="line-height:25px"> 这些模式有以下四点区别:<br style="line-height:25px"> 1,<wbr style="line-height:25px"><span style="line-height:25px"></span><span style="color:#993300; line-height:25px">哪个Task将容纳响应Intent的Activity<wbr style="line-height:25px">。</wbr></span><br style="line-height:25px"> 对于“standard”和“singleTop”来说,除非Intent对象包含FLAG_ACTIVITY_NEW_TASK,那么新的Activity在是产生Intent的那个Task中(即调用startActivity()的Activity)。 <div style="line-height:25px">对于“singleTask”来说,如果它的taskAffinity属性和启动它Activity的一样的话,那么它是产生在启动它Activity的Task中(即调用startActivity()的Activity),否则它是产生在新Task中,且是该Task的根<br style="line-height:25px"> 对比而言,“singleInstance”指示Activity总是一个Task的根。<br style="line-height:25px"> 系统会重新创建一个Task,并把新的Activity加入其中,它们不会加入到另一个Task中。<br style="line-height:25px"> 2,<span style="color:#993300; line-height:25px"><wbr style="line-height:25px">是否有多个Activity的实例</wbr></span><wbr style="line-height:25px">。“standard”和“singleTop”可以实例化多次。它们可以属于多个Task,一个特定的Task可以有相同Activity的多个实例。<br style="line-height:25px"> 对比而言,“singleTask”和“singleInstance”只能有一个实例。不可能在多个task中同时存在有该Activity的多个实例。<br style="line-height:25px"> 也不可能在一个task中存在有该Activity的多个实例。<br style="line-height:25px"> 3,<wbr style="line-height:25px"><span style="color:#993300; line-height:25px">是否可以在同一个Task中拥有其它的Activity<wbr style="line-height:25px">。</wbr></span></wbr></wbr> </div> <div style="line-height:25px">“singleInstance”Activity保持单身,在它的Task中它是仅有的Activity。<br style="line-height:25px"> 如果它启动另一个Activity,那个Activity将会放入到不同的Task中,而不管它的启动模式——好像FLAG_ACTIVITY_NEW_TASK在Intent中一样。<br style="line-height:25px"> 其它三个模式允许多个Activity加入到这个Task中。<br style="line-height:25px"> 4,<wbr style="line-height:25px"><span style="color:#993300; line-height:25px">是否一个新的实例启动来处理新的Intent</span><wbr style="line-height:25px">。对于默认的“standard”来说,都是创建一个新的实例来响应新的Intent。每个实例处理一个Intent。<br style="line-height:25px"> 对于“singleTop”来说,如果它位于目标Task的顶端,那么,已经存在的实例就可以重复使用来处理这个新的Intent。<br style="line-height:25px"> 如果它不在顶端,那么它就不能重复使用。替代的,新的实例将创建来响应新的Intent,并进入到stack中。<br style="line-height:25px"> 例如,假设一个Task的Activitystack中包含根ActivityA和其它ActivityB,C,D,并且D位于顶端,因此,stack是A-B-C-D。有一个Intent来了,它要启动D类型的Activity。如果D是默认的“standard”启动模式,那么一个新的实例将被启动并且stack变成A-B-C-D-D。<br style="line-height:25px"> 然而,如果D的启动模式“singleTop”,已经存在的实例将去处理新来的Intent(因为它正好处在stack的顶端),并且stack依旧是A-B-C-D。<br style="line-height:25px"> 换句话说,如果来临的Intent是冲着B类型的,那么,B类型的实例将被创建启动而不管B的模式是“standard”或“singleTop”(因为B不处在stack的顶端),<br style="line-height:25px"> 因此,stack将会是A-B-C-D-B。<br style="line-height:25px"> 之前提到的,设备上不会出现超过一个实例的“singleTask”或“singleInstance”Activity,因此,那个实例都将去处理所有新来的Intent。<br style="line-height:25px"> “singleInstance”Activity总是位于stack的顶端(因为它是task中唯一的Activity),因此,它总是处于能处理Intent的位置。</wbr></wbr> </div> <div style="line-height:25px">“singleTask”Activity可<span style="color:#000080; line-height:25px">能有或没有其它Activity处于它的上方,它可能是根,也可能不是根。</span><span style="line-height:25px; font-family:Arial,Helvetica,simsun,u5b8bu4f53"><span style="color:#000080; line-height:25px">如果它的</span></span><span style="color:#ff6600; line-height:25px"><span style="line-height:25px; font-family:Arial,Helvetica,simsun,u5b8bu4f53">android:</span><span style="line-height:25px; font-family:Arial,Helvetica,simsun,u5b8bu4f53"><span style="line-height:22px"><wbr style="line-height:22px">taskAffinity</wbr></span></span></span><span style="line-height:25px; font-family:Arial,Helvetica,simsun,u5b8bu4f53"><span style="line-height:22px"><span style="color:#000080; line-height:25px">和启动它的</span>acitivity的</span></span><span style="color:#ff6600; line-height:25px"><span style="line-height:25px; font-family:Arial,Helvetica,simsun,u5b8bu4f53">android:</span><span style="line-height:25px; font-family:Arial,Helvetica,simsun,u5b8bu4f53"><span style="line-height:22px"><wbr style="line-height:22px">taskAffinity</wbr></span></span></span><span style="line-height:25px; font-family:Arial,Helvetica,simsun,u5b8bu4f53"><span style="color:#000080; line-height:25px"><span style="line-height:22px">不一样,</span>它就总是位于Activitystack的底部,它就是根,如果一样,它就不是位于Activitystack的底部,它就不是根。</span></span><span style="color:#000080; line-height:25px">如果在它上方有activity,而这时来个启动该</span><span style="color:#ff6600; line-height:25px">“singleTask”Activity</span>的<span style="color:#003366; line-height:25px">Intent</span>,那么是<span style="color:#003366; line-height:25px">该Activity处理该Intent,而不是它上方的Activity</span>。这时<span style="color:#003366; line-height:25px">上方的所有Activity会被清除掉,当然也Destroy</span>。</div> <div style="line-height:25px"><span style="line-height:25px; color:rgb(0,51,102)">如果在它上方有activity,而这时来个启动其上方的某个Activity的Intent,那么是上方的Activity处理该Intent,而不是该“singleTask”Activity。</span></div> <div style="line-height:25px"> <span style="color:#003366; line-height:25px"> 当一个存在的Activity请求去处理一个新的Intent时,Intent对象将传到该Activity的</span><span style="color:#ff6600; line-height:25px"><span style="line-height:25px"><wbr style="line-height:25px">onNewIntent</wbr></span><wbr style="line-height:25px">()</wbr></span><span style="color:#003366; line-height:25px">的方法中。(原来启动Activity的Intent对象可以通过调用getIntent()得到。)</span><br style="line-height:25px"><span style="line-height:25px">注意</span>:<span style="color:#000080; line-height:25px">当一个新的实例创建来处理新的Intent时,用户可以按下BACK键返回到之前的状态(前一个Activity)。<br style="line-height:25px"> 但一个存在的实例来处理新的Intent时,用户不能按下BACK键返回到新Intent到来之前那个Activity的状态,它也是返回stack中的当前Activity下方的Activity。</span><br style="line-height:25px"><wbr style="line-height:25px"><span style="line-height:25px">三、Task中Activity的清理</span><br style="line-height:25px"> 如果用户离开Task很长一段时间,系统会清除Task中的所有Activity,除根Activity外。当用户再次返回到这个Task时,和用户离开时不一样,仅仅只是初始化Activity呈现。<br style="line-height:25px"> 这样做的意图是,经过一些时间后,用户可能已经忘记之前正在做的事情,并且打算回到Task开始些新的时期。<br style="line-height:25px"> 注意1:弹出任务管理器不算离开Task<br style="line-height:25px"> 这是默认情况。下面一些Activity特性可以用于控制这一行为并且修改它:<br style="line-height:25px"><wbr style="line-height:25px"><span style="color:#ff00ff; line-height:25px">alwaysRetainTaskState</span><br style="line-height:25px"> 如果Task的根Activity的这个特性设置为“true”时,上面描述的默认行为不会发生。Task保留所有的Activity,即便是经过很长一段时间。<br style="line-height:25px"><span style="color:#ff00ff; line-height:25px">clearTaskOnLaunch</span><br style="line-height:25px"> 如果Task的根Activity的这个特性设置为“true”时,当用户离开Task并返回时,stack会清除直到根Activity。换句话说,它是alwaysRetainTaskState的另一个极端。用户总是回到Task的初始化状态,即便是一个短暂的离开。<br style="line-height:25px"><span style="color:#ff00ff; line-height:25px"><wbr style="line-height:25px">finishOnTaskLaunch</wbr></span><br style="line-height:25px"> 这个特性和clearTaskOnLaunch相似,但它针对单个Activity,不是整个Task。它能使除了根Activity之外的任何Activity消失。<br style="line-height:25px"> 当它设置为“true”时,这个Activity仅在当前会话期间保持为Task的部分。如果用户离开并再次返回到这个Task,它就不再显示了。<br style="line-height:25px"><span style="line-height:25px"><wbr style="line-height:25px">注意</wbr></span><wbr style="line-height:25px">:对于clearTaskOnLaunch和finishOnTaskLaunch所谓的清除总是在该task被再次启动时执行的。<br style="line-height:25px"> 这里还有其它的方式可以强制Activity从stack中移除。如果Intent对象中包含<span style="color:#0000ff; line-height:25px">FLAG_ACTIVITY_CLEAR_TOP</span>标志,并且目标Task中已经有一个这个类型Activity的实例,<br style="line-height:25px"> 而且这个实例应该处理这个Intent,那么,位于其上的Activity都将移除,这样,这个Activity就能在stack的顶端并响应这个Intent。<br style="line-height:25px"> 如果这个Activity的启动模式设定为“standard”,它也会从stack中清除,然后新的实例启动来响应这个Intent。<br style="line-height:25px"> 这是因为当启动模式设定为“standard“时,总是会创建一个新的实例来响应新的Intent。<br style="line-height:25px"><span style="color:#0000ff; line-height:25px">FLAG_ACTIVITY_CLEAR_TOP</span>经常与<span style="color:#0000ff; line-height:25px">FLAG_ACTIVITY_NEW_TASK</span>结合起来使用。当一起使用时,这些标志可以定位其它Task中已经存在的Activity,并且把它置于可以响应Intent的位置。<br style="line-height:25px"><wbr style="line-height:25px"><span style="line-height:25px">四、如何重返Task</span><br style="line-height:25px"><span style="color:#003366; line-height:25px">如果一个Activity的IntentFilter的action为“</span><span style="color:#0000ff; line-height:25px">android.intent.action.MAIN</span><span style="color:#003366; line-height:25px">”、category为“</span><span style="color:#0000ff; line-height:25px">android.intent.category.LAUNCHER</span><span style="color:#003366; line-height:25px">”时,<br style="line-height:25px"> 它就可以作为一个Task的入口点。有这种类型的Filter会在导致这个Activity在应用程序启动栏显示一个图标和标签,给用户提供一个方式可以启动这个Task和在任何时候可以再次回到这个Task。</span><br style="line-height:25px"> 第二个能力很重要:用户一定可以离开一个Task,然后可以再次回到它。<br style="line-height:25px"> 基于这个原因,“singleInstance”应该只在有MAIN和LAUNCHER的Activity上使用。</wbr></wbr></wbr></wbr> </div> <div style="line-height:25px">“singleTask”在没有MAIN和LAUNCHER的Activity上使用,应该让它和入口Activity(有MAIN和LAUNCHER的Activity)的taskAffinity一致</div> <div style="line-height:25px">例如,假设这个Filter没有且它和入口Activity的taskAffinity又不一致的话:一个Intent启动了一个“singleTask”Activity,初始化一个新的Task,然后用户花费了一些时间在它上面。然后,用户按下HOME键。现在,这个Task处于后台并且被HOME画面遮盖。</div> <div style="line-height:25px">由于它不能在应用程序启动栏显示,用户就没有办法可以返回它。<br style="line-height:25px"><span style="line-height:25px"><wbr style="line-height:25px">注意</wbr></span><wbr style="line-height:25px">1:<span style="color:#003366; line-height:25px">弹出任务管理器不算离开Task。</span><br style="line-height:25px"><span style="line-height:25px"><wbr style="line-height:25px">注意</wbr></span><wbr style="line-height:25px">2:<span style="color:#003366; line-height:25px">应用程序启动的只是个Task,如果“singleInstance”的Activity没这个IntentFilter的话,自然不能在离开后返回到它。如果“singleTask”的Activity没这个IntentFilter的且它和入口Activity的taskAffinity又不一致的话,自然不能在离开后返回到它.</span><br style="line-height:25px"> 在面对<span style="color:#0000ff; line-height:25px">FLAG_ACTIVITY_NEW_TASK</span>时,也有相似的困难。如果这个标志导致一个Activity启动了一个新的Task,并且用户按下HOME键离开它,这里必须有方法可以再次回到它。<br style="line-height:25px"> 一些机能(如NotificationManager)总是在外部的Task中启动Activity,而不是作为自己的一部分,因此,它总是把<span style="color:#0000ff; line-height:25px">FLAG_ACTIVITY_NEW_TASK</span>标志放入Intent,然后传递给startActivity()。<br style="line-height:25px"> 如果你的Activity可能会被外部的机能(可能使用这个标志)调用,注意让用户可以额外的方式可以返回到启动的Task。<br style="line-height:25px"> 如果你不想用户回到某个Activity,可以把&lt;activity&gt;元素的finishOnTaskLaunch设置为“true”。<br style="line-height:25px"><span style="line-height:25px">五、非ActivityContext中启动Activity</span><wbr style="line-height:25px"><br style="line-height:25px"> 对于Context的startActivity方法,如果不是在其子类(Activity)中调用,那么必须对Intent加<wbr style="line-height:25px">上<span style="color:#0000ff; line-height:25px">FLAG_ACTIVITY_NEW_TASK</span><wbr style="line-height:25px">。<br style="line-height:25px"> 具体可以参照Context中对startActivity方法的说明:<br style="line-height:25px"><span style="color:#993300; line-height:25px">publicvoid</span><span style="color:#ff6600; line-height:25px">startActivity</span>(Intentintent)<br style="line-height:25px"> Launchanewactivity.Youwillnotreceiveanyinformationaboutwhentheactivityexits.<br style="line-height:25px"> NotethatifthismethodisbeingcalledfromoutsideofanActivityContext,<br style="line-height:25px"> thentheIntentmustincludetheFLAG_ACTIVITY_NEW_TASKlaunchflag.Thisisbecause,withoutbeingstartedfromanexistingActivity,thereisnoexistingtaskinwhichtoplacethenewactivityandthusitneedstobeplacedinitsownseparatetask.<br style="line-height:25px"> ThismethodthrowsActivityNotFoundExceptioniftherewasnoActivityfoundtorunthegivenIntent.<br style="line-height:25px"> Parameters<br style="line-height:25px"> intentThedescriptionoftheactivitytostart.</wbr></wbr></wbr></wbr></wbr> </div> </wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> </div> </wbr></wbr></wbr>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值