发Intent的方法:Uri uri = Uri.parse("philn://blog.163.com");Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it);launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法,如下所示:1 protected void onNewIntent(Intent intent) {
Activity四种加载模式。Activity有四种加载模式:每次通过这种模式启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该实例Activity添加到当前Task栈中-这种模式不会启动新的Task,新Activity将被添加到原有的Task中。如果是A Activity跳转到B Activity,再跳转到A Activity,行为就和standard一样了,会在B Activity跳转到A Activity的时候创建A Activity的新实例,因为当时的栈顶不是A Activity实例。
Android开发小技巧Activity的android:launchMode (startard、singleTop、singleTask、singleInstance)onNewIntent:在singleTop下,不产生新实例直接再用某个Activity A1,需要得到来自哪个intent。public void onNewIntent(Intent intent){ super.onNewIntent(intent);
加载模式分类及在哪里配置Activity有四种加载模式:1.standard :首先说standard模式,也就是默认模式,不需要配置launchMode。不过,singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:
Activity的四种启动模式和onNewIntent() Android中Activity启动模式详解。2. singleTop 如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,并调用其onNewIntent(),否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例,而不会调用onNewIntent(),此时就跟standard模式一样)。
核心的Intent Flag有:   FLAG_ACTIVITY_NEW_TASK   FLAG_ACTIVITY_CLEAR_TOP   FLAG_ACTIVITY_RESET_TASK_IF_NEEDED   FLAG_ACTIVITY_SINGLE_TOP   核心的特性有:   taskAffinity   launchMode   allowTaskReparenting   clearTaskOnLaunch   alwaysRetainTaskState   finishOnTaskLaunch  四种加载模式的区别  所属task的区别。这种实例化时一个task可以包括一个activity的多个实例;
我们看到,两个FirstActivity的序列号是不同的,证明从SecondActivity跳转到FirstActivity时生成了新的FirstActivity实例。在图中的下半部分是SecondActivity跳转到FirstActivity后的栈结构变化的结果,我们注意到,SecondActivity消失了,没错,在这个跳转过程中系统发现有存在的FirstActivity实例,于是不再生成新的实例,而是将FirstActivity之上的Activity实例统统出栈,将FirstActivity变为栈顶对象,显示到幕前。
1.什么是Activity 2.Activity生命周期3.Activity生命周期演示4.Activity之间的通信5.Activity之加载模式6.Activity的栈式管理。OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, FirstActivity.class);这就是singleTask模式,如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。
【Android】任务和返回栈(task and back stack) Task是指将相关的Activity按照先进后出的规则组合到一起,以Activity Stack的方式进行管理。SingleTask的例子:浏览器的browser activity设置了SingleTask只运行在它自己的task中,如果Browser的task现在正在后台当中(task B),而我们的app(task A)的正要打开这个activity,这个task就会被直接移到前台接收我们的intent。使用FLAG_ACTIVITY_NEW_TASK启动一个activity。
我打赌你一定没搞明白的Activity启动模式。对于大部分应用,当我们在主界面点击回退按钮的时候都是退出应用,那么当我们第一次进入主界面之后,主界面位于栈底,以后不管我们打开了多少个Activity,只要我们再次回到主界面,都应该使用将主界面Activity上所有的Activity移除的方式来让主界面Activity处于栈顶,而不是往栈顶新加一个主界面Activity的实例,通过这种方式能够保证退出应用时所有的Activity都能报销毁。
activity的启动模式。launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例。standard模式是默认的启动模式,不管有没有已存在的实例,都生成新的实例。如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。
^_^ 进入Activity2,然后到Activity1,我们看Log信息为: 03-01 14:50:08.144: ERROR/Activity2(371): Activity2 onCreated! HashCode=1156067168 TaskId=7 03-01 14:50:13.923: ERROR/Activity1(371): Activity1 onCreate! HashCode=1156107384 TaskId=7 我们看到,当本应用启动singleTask的Activity(Activity1)时,Activity1并没用另外启用一个任务。
Android总结篇系列:Activity中几个主要函数详解。提到这类函数组合,相信只要有过一段时间Android开发的来说都很熟悉了,此函数组合主要用于如下场景:用户在A Activity上点击某个按钮,跳转到B Activity,然后用户在B Activity上进行一些具体的操作,待操作完成后返回到A Activity,同时常常将B Activity中操作的一些数据返回到A Activity中。此方法直接将当前Activity所在的Task移到后台,同时保留activity顺序和状态。
android: startactivityforresult.startActivityForResult(Intent intent, Int requestCode);setResut(int resultCode, Intent intent);onActivityResult(int requestCode, int resultCode, Intent intent);1.最近使用startActivityForResult,出错,跟踪后发现activity并没有被启动,而是直接执行onActivityResult。2.requestCode值>=0,否则,startActivityForResult就变成了startactivity.
android onnewintent()函数的使用 今天在编程的时候,遇到这样的情况,一个Activity A跳转到另一个Activity B(Activity A并没有被finish掉),B处理完后,将一些值通过Intent重新传回给Activity A。protected void onNewIntent(Intent intent) { super.onNewIntent(intent);Intent intent = getIntent();//must store the new intent unless getIntent() will return the old one Intent intent = getIntent();
Intent intent = new Intent(this, B.class);杀进程等的等方式都不行~~~解决问题:我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在D窗口打开A窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,再次开启A时将会清除该进程空间的所有Activity。Overrideprotected void onNewIntent(Intent intent) {// TODO Auto-generated method stubsuper.onNewIntent(intent);
2、如果打开的是主入口,且没有通过Intent.setFlag(Intent.FLAG_ACTIVITY_NEW_TASK)设置,则会把新的activity添加到当前的activity所在的task内。singleInstance类型的activity打开的activity如果不设置flag,默认也不会放在自己的task中,类型和设置flag为new_task是一样的,如果纯在应用对应的task,会放在这个task中(如例子中的task2),如果没有,则会创建一个新的task,把activity放进去。
setTheme(android.android:layout_width="fill_parent"android:layout_height="fill_parent">android:layout_width="fill_parent"android:layout_height="wrap_content"/>android:layout_width="wrap_content"android:layout_height="wrap_content"Android学习笔记(2)-初识Activity根据文档的解释,Activity是Android开发中非常重要的一个基础类。android:layout_width="wrap_content"android:layout_height="wrap_content"/>
singleTop 、singleTask 下的Activity生命周期。若你想利用已有的Acivity去处理别的Intent时,你就可以利用onNewIntent来处理。在onNewIntent里面就会获得新的Intent.} 如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于onPauseonStop 状态的话其他应用再发送Intent的话,执行顺序为:onNewIntentonRestartonStartonResume.
如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。
[干货]2017已来,最全面试总结——这些Android面试题你一定需要。singleTop 模式如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。http://www.jianshu.com/p/d9143a92ad94http://www.jianshu.com/p/fd71d65f0ec6http://www.jianshu.com/p/38f7994faa6b.关于Java和Android大牛频道。
调用startActivityForResult后,onActivityResult无响应的题目,上海网站建设|专业网站建设公司|高端网站建设开发|企业网站建设。后面找了很多材料,总算看到一个伴侣说是调用startActivityForResult的参数题目,即调用时如许:startActivityForResult(intent, 0);是第二个参数的题目,该参数必须大于0才干在返回值,并激活onActivityResult办法。onActivityResult(int requestCode, int resultCode, Intent intent);
Intents Intents在android中的作用,就好像一个信使一样,通知另一个activity开始工作。但是在android中,A调用的B的过程是这样的。当A需要调用B的时候,并不是自己调用B,而是让系统去调用B,A自己做的事情只是自己把自己要调用的activity的形象封装成一个Intent。intent-filter标签中的三个标签 ,名字。同时也起到过滤作用 Broadcasts 接受系统intent或者外部的intent的一个容器。
完全關閉Activity.Intent startMain = new Intent(Intent.startMain.addCategory(Intent.startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(startMain);android.os.Process.killProcess(android.os.Process.myPid());注意:需要添加權限:
什么时候要加上 android.intent.category.DEFAULT.意思是说,每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",所以只要是想接收一个隐式 Intent 的 Activity 都应该包括 "android.intent.category.DEFAULT" category,不然将导致 Intent 匹配失败。
Android 快速去掉Activity的切换动画1.去掉进场。Intent intent=new Intent(this,MainActivity.class);overridePendingTransition(0, 0);2.去掉出场动画。在需要结束的activity中重写finish方法。@Override public void finish() { super.finish();主要用来重写activity的切换动画,第一个为进场动画,第二个为出场动画,可以引入xml文件类型的基本动画。
关于Android app首次安装完成后在安装界面直接“打开”应用再按home键返回桌面,重新进入app重复实例化launcher activity的问题的解决。2. 然后按home键返回桌面,在桌面点击app图标进入,你觉得应该进入的是 Activity_2 ,实际上却是launcherActivity_1 .3. 然而还没完,这时候你按 back 返回键,会发现返回到了之前打开的 Activity_2,再按返回,又出现 launcherActivity_1. 也就是说系统重复实例化了Activity_1.