(之前看小强也写过一篇,这里通过自身的分析完整的总结一下以下6种方案,并加上一个DEMO便于大家了解大体流程) 在android的用户交互中,按钮触发的意图(Intent)跳转会为你重新打开新的一个界面活动...(2)客户端交互中,返回首页按钮,由于在频繁的点击打开过多的界面(如微信查看朋友圈),返回首页就必须一个一个back回去,所有有的客户端为了优化用户体验,便会加入一个按钮返回首页(之前打开的全部关闭)。...Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标 志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启.../** * Stack 中对应的Activity列表 (也可以写做 StackActivity>) */ private static Stack mActivityStack...中调用带请求码的Intent跳转意图。
显式深层链接 显式深层链接使用PendingIntent跳转到指定页面,例如应用程序收到某个通知推送,用户点击此通知时,条抓到展示该通知的内容页面。...当用户通过显式深层链接打开您的应用时,任务返回堆栈会被清除,并被替换为相应的深层链接页面。当用户从深层链接页面按下返回按钮时,他们会返回到相应的导航堆栈。...在这种情况下,如果按下返回按钮,您会返回到上一个应用;如果按下向上按钮,就会在导航图中的父级目的地上启动应用的任务。...// remove it from the back stack and put our replacement // on the back stack in its...// remove it from the back stack and put our replacement // on the back stack in its
Bundle bundle = getIntent().getExtras(); //getIntent()能够得到activity传递过来的意图(Intent) 对象,然后调用getExtras...startActivity(intent);//激活意图,页面跳转 } 上面的代码正是通过这些键值取出相应的值 分析到这里,就完美的解决了activity之间数据传递的问题...,这个按钮是用图片来设置的 image.setBackgroundResource(drawable);//设置按钮控件的背景图片 image.setText(foodname);//设置按钮的内容...back=(Button)findViewById(R.id.backbutton);//找到返回按钮控件 back.setOnClickListener(new OnClickListener...);//设置按钮的背景图片 Intent intent=new Intent(FoodInfo.this, FoodListView.class);//返回到上一个界面也是用Intent意图 startActivity
Back Stack 一个Task所有的Activity被放置在一个stack结构中,根据它们的启动顺序被添加。...特点:只能有一个,且其Task只包含此Activity。 返回规则 不论启动的Activity在当前Task还是新的Task中,返回按钮总是把用户带到前一个Activity界面。...A representation of how an activity with launch mode "singleTask" is added to the back stack....If the activity is already a part of a background task with its own back stack, then the entire back...清空back stack 默认情况下,系统会保持Task中的stack,即便对应Activity的进程被回收,它还会重建。
当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。...2.3.3 BackStack activity和fragment生命周期最重要的不同之处是它们如何存储在各自的back stack中。 ...activity掌管的back stack中。...将fragment弹出back stack: popBackStack():将back stack中最后一次的fragment转换弹出。如果没有可以出栈的东西,返回false。 ...在commit()方法之前,你可以调用addToBackStack(),把这个transaction加入back stack中去,这个back stack是由activity管理的,当用户按返回键时,就会回到上一个
我们知道Activity有任务栈,用户通过startActivity将Activity加入栈,点击返回按钮将Activity出栈。...Fragment也有类似的栈,称为回退栈(Back Stack),回退栈是由FragmentManager管理的。 ?...如果没有加入回退栈,则用户点击返回按钮会直接将Activity出栈;如果加入了回退栈,则用户点击返回按钮会回滚Fragment事务。...在上面2个方法里面,都用到了flags,其实flags有两个取值:0或FragmentManager.POP_BACK_STACK_INCLUSIVE。...当取值0时,表示除了参数指定这一层之上的所有层都退出栈,指定的这一层为栈顶层;当取值POP_BACK_STACK_INCLUSIVE时,表示连着参数指定的这一层一起退出栈。
可能是因为宿主activity处于stopped状态,或者fragment被remove掉,然后加在了back stack中。 ...当然如果你可以在fragment中得到View那就可以通过View.findViewId()来操控fragment上的具体控件。 5.动态加载不同的fragment: 首先,监听你的按钮。...6.Back Stack activity和fragment生命周期最重要的不同之处是它们如何存储在各自的back stack中。...Activity停止时,是存在一个由系统维护的back stack中,但是当fragment停止(被remove)时,需要程序员显式地调用addToBackStack() ,并且fragment是存在一个由宿主...activity掌管的back stack中。
上面两个方法都用到了 Intent参数,Intent是Android应用里各组件之间通信的重要方式,一个Activity通过Intent来表达自己“意图”——想要启动哪个组件,被启动的组件既可是 Activity...其中第一个Activity的界面布局非常简单,只包含一个按钮和文本提示,其中按钮的作用主要是启动第二个Activity。...对应的布局也比较简单,包含3个按钮和一个文本提示,其中一个按钮用于简单的返回上一个Activity,第二个按钮用于结束自己并返回上一个Activity,第三个按钮直接结束自己。...); // 获取应用程序中的返回按钮 Button backBtn = (Button) findViewById(R.id.back_btn); /.../ 获取应用程序中的返回关闭按钮 Button backCloseBtn = (Button) findViewById(R.id.back_close_btn); //
Guide”, ASCII Media Works, July 2009 [3] http://developer.android.com/guide/components/tasks-and-back-stack.html...对于私有和内部活动,不需要过多担心返回的数据被恶意使用,因为它们被返回到您控制的应用。 伙伴活动中间有些东西。 如上所述,当从活动中返回数据时,您需要注意来自目标应用的信息泄漏。...则使用显式意图(必需) 当通过隐式意图使用Activity时,Intent发送到的Activity由 Android OS 确定。...请参阅“4.1.3.1 组合导出属性和意图过滤器设置(对于活动)” 4.1.2.9 小心并安全地处理来自被请求活动的返回数据(必需) 根据您访问的活动类型,风险略有不同,但在处理作为返回值的收到的Intent...公共活动必须接受来自不受信任来源的返回意图,因此在访问公共活动时,返回的意图实际上可能是由恶意软件发送的。 人们往往错误地认为,私有活动返回的所有内容都是安全的,因为它们来源于同一个应用。
Fragment实现原理和Back Stack 我们知道Activity有任务栈,用户通过startActivity将Activity加入栈,点击返回按钮将Activity出栈。...Fragment也有类似的栈,称为回退栈(Back Stack),回退栈是由FragmentManager管理的。...我们将通过最常见的Fragment用法,讲解Back Stack的实现原理: getSupportFragmentManager().beginTransaction() .add(R.id.container...,0表示只弹出该元素以上的所有元素,POP_BACK_STACK_INCLUSIVE表示弹出包含该元素及以上的所有元素。...功能如下:共有三个Fragment:F1, F2, F3,F1在初始化时就加入Activity,点击F1中的按钮跳转到F2,点击F2的按钮跳转到F3,点击F3的按钮回退到F1。
Fragment实现原理和Back Stack 我们知道Activity有任务栈,用户通过startActivity将Activity加入栈,点击返回按钮将Activity出栈。...Fragment也有类似的栈,称为回退栈(Back Stack),回退栈是由FragmentManager管理的。...我们将通过最常见的Fragment用法,讲解Back Stack的实现原理: ?...popBackStack(String name, int flag):name为addToBackStack(String name)的参数,通过name能找到回退栈的特定元素,flag可以为0或者FragmentManager.POP_BACK_STACK_INCLUSIVE...,0表示只弹出该元素以上的所有元素,POP_BACK_STACK_INCLUSIVE表示弹出包含该元素及以上的所有元素。
前言 我们知道广播ACTION_PACKAGE_REMOVED可以监听应用程序卸载,但不幸的是这个意图被卸载的程序是不可知的,所以无法监听到自己的程序被卸载。...当我们点击卸载按钮时,会打开卸载确认界面com.android.packageinstaller.UninstallerActivity。 ?...持续监控前台运行的Activity。...button was pressed and the user has been taken back to Manage Applications window...Looper.loop(); } } 已知的限制 当用户点击管理应用程序的设置下的卸载按钮,我们将执行我们的预卸载任务然后要求用户确认窗口,但是用户可以确认卸载或可以取消操作,上述实现并没有考虑到用户点击取消卸载按钮的逻辑
当Activity被销毁,就无法获取在被销毁的Activity中创建的子线程实例了。...例如,Activity创建了一个子线程在后台运行,执行完之后,返回数据时,创建它的Activity已被销毁,这是线程不安全的。...应该始终定义一个当用户点击通知时会触发的操作;通常,此操作会在应用中打开Activity。也可以向通知添加按钮来执行其他操作,例如,暂停闹铃或立即答复短信。...); // The stack builder object will contain an artificial back stack for the // started Activity. //...TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); // Adds the back stack for the Intent
修改FirstActivity中按钮的点击事件,代码如下所示: ?...可以看到,我们还是构建了一个Intent,只不过这个Intent仅仅是用于传递数据而已,它没有指定任何的“意图”。紧接着把要传递的数据存放在Intent中,然后调用了setResult()方法。...重新运行程序,在FirstActivity的界面点击按钮会打开SecondActivity,然后在SecondActivity界面点击Button 2按钮会回到FirstActivity ?...这时候你可能会问,如果用户在SecondActivity中并不是通过点击按钮,而是通过按下Back键回到FirstActivity,这样数据不就没法返回了吗?...其实Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack)。
onClick(View v) { finish(); } }); 重新运行程序,这时点击一下按钮,当前的活动就被成功销毁了,效果和按下Back键是一样的。...很简单,按下Back键就可以销毁当前活动,从而回到上一个活动了。使用这种方式来启动活动,Intent的“意图”非常明显,因此我们称之为显式Intent 。...为了让你能够更加直观地理解,我们来自己建立一个活动,让它也能响应打开网页的Intent。...意图”。...其实Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack)。
Fragment的ViewGroup.为了在Activity中操作Fragment事务(例如添加、移除或代替),必须使用来自FragmentTransaction....activity 中存在的fragment 2..../ Commit the transaction transaction.commit(); Fragment通过调用addToBackStack(), replace事务被保存到back stack,...Fragment真正的onPause以及onResume Fragment虽然有onResume()和onPause()方法,但是这两个方法是Activity的方法调用时机也与Activity相同, 和...This calls finish() on this activity and pops the back stack.
任务栈(Task Stack)或者叫退回栈(Back Stack)介绍: 3.1.任务栈用来存放用户开启的Activity。...点击back会将栈顶Activity弹出,并产生新的栈顶元素作为显示界面(onResume状态)。...我们发现创建了很多的TwoActivity。 同时我们打印上task的Id(我没有把所有周期方法都打印log): ? 发现他们全部都是来自一个Task。这个可以过。...在跳回MainActivity之后点击back键发现直接退出引用了,这说明此时的MainActivity为task内的最后一个Activity。所以这个模式过。...我们发现back的时候会先把Foreground的Task中的Activity弹出,直到Task销毁,然后才将Background的Task唤到前台,所以最后将Activity3销毁之后,会直接退出应用
= null) { startActivity(intent); } } } 批注: 按钮1,2为了演示隐式意图,按钮3演示显式意图 if (intent.resolveActivity..."/> 使用意图在第二个activity回传数据给第一个activity 实验要求:编程实现具有“登录”按钮的主界面,点击“登录”按钮后打开另一个新的Activity,在新打开的...,为您提供requestCode,启动它,返回resultCode,以及来自它的任何其他数据。...关于意图的小Demo Demo地址:https://github.com/liuchenyang0515/shiyan4_1 实验要求: 根据要求的界面,实现以下功能: (a) 当点击“添加数据”按钮时...的消息提示框,然后清空界面上已输入的数据,并准备接受下一次的输入; (b) 当点击“全部显示”按钮时,界面跳转到下一个界面(第二个Activity),这该界面中显示前面已多次输入的“姓名、年龄和身高”的数据
我们把这个工程中创建的一个新的Activity,然后再有Hello World中添加一个按钮,点击按钮跳转到我们创建的新的Activity中。在新的按钮中点击Back返回到上一个Activity中。...使用Intent进行Activity的跳转 Intent在Android开发中被誉为“意图”,从字面意思不难理解,就是“你打算去哪”。...intent.putExtra("extra_data", data); (3) 在新的Activity中我们需要获取传过来的值显示在TextView上,并且点击一个Back按钮返回到上一层Activity...点击SecondActivity中的Back按钮就会执行finish()方法返回上一个Activity。 ? 2....会跳转到ThirdActivity中,然后从ThirdActivity中点击Back按钮进行返回就会在上一个Activity中的TextView上显示ThirdActivity中返回的值,具体效果如下所示
领取专属 10元无门槛券
手把手带您无忧上云