- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
startActivity
中似乎存在错误.
通过将 Activity 设置为 singleTop
与不同taskAffinity
在 AndroidManifest.xml 中并使用 Intent.FLAG_ACTIVITY_NEW_TASK
调用startActivity
时,可以在两个任务中创建两个 Activity (每个任务一个 Activity )。
调用startActivity
再次将返回到第一个 Activity/任务和 onNewIntent
叫做。但是,调用 startActivity
第四次将返回到第二个 Activity/任务,但 onNewIntent
没有被调用。
这两个任务的唯一区别是它们的taskAffinity
.不知何故,观察到不对称行为。
但是,如果 Intent.FLAG_ACTIVITY_SINGLE_TOP
也使用,然后 onNewIntent
按预期调用。
似乎 singleTop
AndroidManifest.xml 中的 Intent.FLAG_ACTIVITY_SINGLE_TOP
不一样在 Intent
.
public class ActivityA extends Activity implements OnClickListener { private String tag; @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); tag = getClass().getName(); Log.v(tag, "onCreate()"); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.button); button.setText(tag.endsWith("ActivityA") ? "Activity B" : "Activity A"); button.setOnClickListener(this); } @Override public void onClick(View v) { Intent intent; int flags = Intent.FLAG_ACTIVITY_NEW_TASK // | Intent.FLAG_ACTIVITY_SINGLE_TOP ; Log.v(tag, "onClick()"); intent = new Intent(this, tag.endsWith("ActivityA") ? ActivityB.class : ActivityA.class); intent.setFlags(flags); startActivity(intent); } @Override protected void onNewIntent(Intent intent) { Log.v(tag, "onNewIntent()"); }}
public class ActivityB extends ActivityA {}
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".ActivityA" android:launchMode="singleTop" android:label="Activity A"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ActivityB" android:launchMode="singleTop" android:label="Activity B" android:taskAffinity="activity.B"> </activity> </application></manifest>
最佳答案
这有点晚了,但因为我刚刚遇到这个 -正如马特所提到的, list 和 Intent 中的标志 Activity 单顶是不一样的(至少在以前版本的 android 上)。
在startActivityUncheckedLocked
方法中:
Gingerbread - https://github.com/android/platform_frameworks_base/blob/gingerbread/services/java/com/android/server/am/ActivityStack.java
查看第 2204 行 --
if ((launchFlags&Intent.FLAG_ACTIVITY_SINGLE_TOP) != 0
&& taskTop.realActivity.equals(r.realActivity)) {
所以它只是检查 Intent 上的启动标志,而不是检查 list 。将此与 jellybean mr1 版本进行比较:
查看第 2835 行 --
if (((launchFlags&Intent.FLAG_ACTIVITY_SINGLE_TOP) != 0
|| r.launchMode == ActivityInfo.LAUNCH_SINGLE_TOP)
&& taskTop.realActivity.equals(r.realActivity)) {
所以似乎在 mr1 中,除了 launchFlags
(可能是 Intent 本身)之外,他们正在检查 r.launchMode (可能是 AndroidManifest.xml
值) ,而在旧版本中,它们只检查 Intent 标志。
它实际上是在 2012 年 2 月 16 日修复的,在这个提交中: https://github.com/android/platform_frameworks_base/commit/f363dfd26c304bca33f12065a9ed3de291193962
短版本是 - 在 Intent 和 list 中设置单个顶部标志。
(感谢对 android bug tracker 中相关 bug 的评论指出要查看哪个源文件 - http://code.google.com/p/android/issues/detail?id=4155#c9)。
关于android - 错误 : onNewIntent not called for singleTop activity with Intent. FLAG_ACTIVITY_NEW_TASK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4020909/
我有一个 Activity A,当我按下工具栏项时,它会使用 startActivity(intent) 启动 Activity B。每当我按下后退按钮或向上导航图标时,它都会关闭我的应用程序。我相信
我在理解启动 Activity 时的 singleTop 标志时遇到了一些问题。 在我的应用程序中,我有 2 个任务: Task 1 : A,B,C,D Task 2 : X,Y,Z 除了 Activ
我有一个 Activity 启动模式为 singleTop 显示权限对话框。 但是当存在权限对话框并且针对该 Activity 出现新的 Intent 时,将创建另一个实例。onNewIntent()
我在 android 文档中读到 singleTop 模式是这样的: If an instance of the activity already exists at the top of the c
在我的应用程序中有一个我不理解的行为。我将 MainActivity A 作为 SingleTask。它调用 Activity B 也是 SingleTask。当我在第二个 Activity 中按下
我有一个 SearchActivity,它在 list 中用 android:launchMode="singleTop" 定义。 我的 SearchActivity 包括一个供用户输入查询的 Sea
我有一个 ListActivity 作为我应用程序的主要 Activity 。列表中的项目应该是可搜索的,但自然我不想一遍又一遍地开始相同的 Activity ,因此 singleTop。但是,我确实
我有一个显示一个事件的主要 Activity ( Activity A)(我的应用程序是关于事件管理的),我需要能够打开其他 2 个子 Activity 并能够再次“向上”导航到它们的父级 (A) ,
我有一个 Activity android:launchMode="singleTop" 我如何操作 Intent 以在 Top 上创建新的 Activity。因为在特殊情况下我需要一个新的
我在为不同的 Activity 实现不同类型的启动模式时遇到了设计问题。我有 5 个 Activity 。 视频列表 视频详情 收藏夹列表 视频搜索 视频播放器 当用户启动应用程序时,它会转到显示视频
场景如下: 开始 Activity A Activity A 启动服务 S 服务 S 在前台模式下运行并显示一个通知,当用户按下该通知时会将用户带到 Activity B(具有 launchMode=
我使用订阅了 android.location.PROVIDERS_CHANGED 的广播接收器收听 GPS 激活或 GPS 停用。 当 GPS 停用时,我想打印一个弹出窗口。为此,我使用以下代码:
我有一个 Activity,其 launchMode 是 singleTop(在 list 中)。我的理解是,如果 Activity 是 singleTop 并且它位于 Activity 堆栈的顶部,
当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当activity实例创建后就会放入任务栈中。activity启动模式的设置在androidmanifest.xml文件中,通过配置acti
我正在努力应对 SingleTop Activity 的以下奇怪行为。 我在该 Activity 中定义了一些 Intent 过滤器:
当 Activity 有以下情况时,如何重新启动我的应用程序或 MainActivity: android:launchMode="singleTop" 我试过: Intent i = getBase
我有一个应用程序,如果从另一个应用程序(例如通过 playstore)启动,它会出现异常。它不是恢复到已经存在的 Activity,而是作为一个新实例重新启动。 我有什么: 在 manifest.xm
我正在使用自定义方案为 Fitbit 实现 OAuth,为此我需要在用户在默认浏览器中登录后从堆栈顶部使用调用 Activity 的实例,并且被重定向到 CALLBACK URL。不是调用 onNew
我有一个定义为 singleTop 的 Activity,因此只有一个实例存在。 我用一些数据设置了一个 Notification Intent,并将其包含在 PendingIntent 中,
问题来了。我的 list 中有一个 定义如下: 现在,用户使用启动器图标启动 MainActivity,它转发到 HomeActivity
我是一名优秀的程序员,十分优秀!