我的手机进入一个软件然后再cf进入游戏就退到桌面面,停半多分钟点开后台再进去就有的重新进这怎么回事

多渠道资源位展示,新品上线、大版本更新发布的最佳选择,独家首发合作更有强势曝光。
通过发布软件特权,上助手福利专区吸引大量用户下载。
助手、卫士、清理大师,360核心资源助力应用推广
手游运营体系
日常运营、重大开服开测事件推广,手机助手专题页展示。
TA们都在参与推广
多平台重点资源位展示,在游戏无包阶段开启游戏预约,沉淀目标玩家,为游戏首发聚量。
TA们都在参与推广
低成本拉新、拉活游戏玩家,预算可控简单高效。
TA们都在参与推广
双平台突出位置展现,礼包形式丰富多种激励方式,适用于不同阶段游戏运营
TA们都在参与推广
日常用户引导和活动推广的利器。
TA们都在参与推广
给用户提供更丰富的游戏介绍,更好的为玩家传递游戏亮点。
360移动推广沙龙
武汉光谷资本大厦2楼Club Muse苏荷缪斯.日14:00
软件开发者
注册开发者创建应用平台审核发布上线
游戏开发者
注册开发者创建应用签署联运合同平台审核发布上线
快速注册,即可坐享亿级流量
360相关产品服务
在线客服(工作日:10:00-19:00)
开平官方QQ群:
开发平台客服QQ:
开发平台客服QQ:
官方微信 dev_360
获取人工客服支持Access denied | www.vpsee.com used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website (www.vpsee.com) has banned your access based on your browser's signature (3fcc59cc-ua98).下次自动登录
现在的位置:
& 综合 & 正文
android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用的解决方法
android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用的解决方法
这个问题困扰了我一下午,查了好多资料都不太跟这个问题沾边,但还是查到了。。记录下来,为了自己,也为了方便别人。
这个问题是因为在AndroidManifest.xml中,你的启动activity中加了android:launchMode="singleTask",将这行代码去掉就可以了。如下图:
关于为什么会引起这个问题,主要还是不太了解activity的launchMode,查了下资料,感觉楼主整理的不错,就引用过来,如下文:
Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance。以下逐一举例说明他们的区别:
standard:Activity的默认加载方法,即使某个Activity在Task栈中已经存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入栈中。例如:现在栈的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的栈情况为: A B C D D 。此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时如果依次按返回键,D
D C B A将会依次弹出栈而显示在界面上。
singleTop:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A
singleTask:如果某个Activity是singleTask模式,那么Task栈中将会只有一个该Activity的实例。例如:现在栈的情况为:A B C D。B的Launch mode为singleTask,此时D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。
关于singleTask这个网上颇有争议,包括google api上的说明也让我看的是一头雾水,自己用实例亲测,终于算是搞清楚了
正解:1.singleTask 并不一定处于栈底
   2.singleTask 并一定会是栈底的根元素 
3.singleTask 并不一定会启动新的task  
 情况一:如果在本程序中启动singleTask的activity:假设ActivityA是程序的入口,是默认的模式(standard),ActivityB是singleTask 模式,由ActivityA启动,刚ActivityB不会位于栈底,不是根元素,不会启动新的task,此种情况ActivityB会和ActivityA在一个栈中,位于ActivityA上面
  情况二:如果ActivityB由另外一个程序启动:假设apkA是情况一中的应用,apkB是测试程序,在apkB中启动apkA中的ActivityB,刚ActivityB会位于栈底,是根元素,会启动新的task
注意:singleTask模式的Activity不管是位于栈顶还是栈底,再次运行这个Activity时,都会destory掉它上面的Activity来保证整个栈中只有一个自己,切记切记
singleInstance:将Activity压入一个新建的任务栈中。例如:Task栈1的情况为:A B C。C通过Intent跳转到D,而D的Launch mode为singleInstance,则将会新建一个Task栈2。此时Task栈1的情况还是为:A B C。Task栈2的情况为:D。此时屏幕界面显示D的内容,如果这时D又通过Intent跳转到D,则Task栈2中也不会新建一个D的实例,所以两个栈的情况也不会变化。而如果D跳转到C,则栈1的情况变成了:A B C C,因为C的Launch mode为standard,此时如果再按返回键,则栈1变成:A
B C。也就是说现在界面还显示C的内容,不是D。
好了,现在有一个问题就是这时这种情况下如果用户点击了Home键,则再也回不到D的即时界面了。如果想解决这个问题,可以为D在Manifest.xml文件中的声明加上:
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
加上这段之后,也就是说该程序中有两个这种声明,另一个就是那个正常的根activity,在打成apk包安装之后,在程序列表中能看到两个图标,但是如果都运行的话,在任务管理器中其实也只有一个。上面的情况点击D的那个图标就能回到它的即时界面(比如一个EditText,以前输入的内容,现在回到之后依然存在)。
PS:intent-filter中 &action android:name="android.intent.action.MAIN" /&和 &category android:name="android.intent.category.LAUNCHER" /&两个过滤条件缺一不可才会在程序列表中添加一个图标,图标下的显示文字是android:label设定的字符串。
本文转自:
【上篇】【下篇】Android中Activity启动模式详解,可以控制程序按home键后进来还会调用一个自己不喜欢的界面
时间: 11:15:46
&&&& 阅读:17543
&&&& 评论:
&&&& 收藏:0
标签:其实这是很简单的一个问题。但是这还是要对android中activity的启动模式有相当的理解才行,当点击home键的时候,懂Android的人都知道,他会把当前activity放到后退栈中,
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。
Android总Activity的启动模式分为四种:
Activity启动模式设置:
Activity的四种启动模式:
1. standard
模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。
2. singleTop
如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
3. singleTask
如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
4. singleInstance
在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。
其中standard是系统默认的启动模式。
下面通过实例来演示standard的运行机制:
初始化界面如下:
当点击按钮时,会创建新的Activity,通过后16进制数的显示即可看出,点击两次分别界面如下:
此时,我们分析栈内部的运行机制:(依次从栈顶向上)
因此,这种Standard模式是每次都会创建新的Activity对象,当点击返回按钮时,他会将栈顶(当前Activity)消灭,然后跳 到下一层,例如如果现在Activity是44ed8c50,那么当我们点击返回时Activity会变为44f28a48,不过此时在这个 Activity中再次点击按钮创建对象时,它会另外创建新的Activity对象,这种模式可能大多数情况下不是我们需要的,因为对系统性能的消耗过 大。
下面我们介绍两种能使用当前栈中Activity的启动模式:
从上面的解释中即可知道,在每次使用新的Activity时会自动检测栈顶的当前Activity是否是需要引用的Activity,如果是则直接引用此Activity,而不会创建新的Activity。
我们在刚才的界面中加入一个&启动singletop模式&按钮,当点击时出现我们创建的singletop中,在Activity singletop中有一个按钮,启动singletop模式,表示启动当前Activity,由于我们在清单文件中配置Activity的启动模式为 singleTop,因此此时不会再创建而是利用当前栈顶的singleTop Activity:
界面初始化:
点击&启动singleTop模式&按钮:
我们分析它的运行机制,可知,当程序运行到此时,栈中的数据形式为:
当我们在上面界面中点击&启动singleTop模式&按钮时,由于此Activity设置的启动模式为singleTop,因此它首先会 检测当前栈顶是否为我们要请求的Activity对象,经验证成立,因此它不会创建新的Activity,而是引用当前栈顶的Activity。
虽然它不会创建新的Activity对象,不过它每次回调用onNewIntent()方法:
我们为此方法编写代码输出当前日期,则在每次点击上面按钮时会输出当前日期。
singleTask
此启动模式和singleTop在名字上即可看出区别,即singleTop每次只检测当前栈顶的Activity是否是我们需要请求创建的,而 singleTask则会检测栈中全部的Activity对象,从上向下,如果检测到是我们所请求的则会消灭此Activity对象上面的对象,直接把检 测到的我们需要的Activity置为栈顶。
我们创建一个SingleTaskActivity,此界面中包含一个启动MainActivity和启动SingleTaskActivity按钮。
点击&启动singleTask模式&按钮:
在此界面中点击第二个按钮&启动singleTask模式&按钮,根据定义会检测当前栈中是否有此Activity对象,因此显示的还是当前的Activity,不会重新创建;
再点击&启动Standard模式&按钮,由于MainActivity的启动模式为standard,所以在此会重新创建一个MainActivity对象:
此时栈中数据格式为:
当在上面界面中点击&启动singleTask模式&按钮时,由于检测到当期栈中第二个为我们要创建的Activity,会将最上面的MainActivity消灭,然后将SingleTaskActivity设置为栈顶:
SingleInstance
此启动模式和我们使用的浏览器工作原理类似,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。
上面即为Android中的四种启动模式,我们在开发Android项目时会经常使用到,巧妙设置Activity的启动模式会节省系统开销和程序运行效率。
标签:原文地址:http://blog.csdn.net/u/article/details/
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!}

我要回帖

更多关于 花呗付款退款退到哪里 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信