- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题来了。我的 list 中有一个
<activity
android:name=".HomeActivity"/>
<activity-alias
android:name=".MainActivity"
android:targetActivity=".HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
现在,用户使用启动器图标启动 MainActivity
,它转发到 HomeActivity
。
我还有一个从抽屉导航启动 HomeActivity
的 Intent。它以 Intent.FLAG_ACTIVITY_SINGLE_TOP | 开始。 Intent.FLAG_ACTIVITY_CLEAR_TOP
标志 - 重用现有的 Activity 实例。
问题是这没有按预期工作,它实际上创建了 HomeActivity
的新实例(即使它当前位于顶部并且可见!)。发生这种情况是因为 Activity 后台堆栈包含 .MainActivity
的条目,而不是它最终转发到的 HomeActivity
的条目。
问题:我怀疑这可能是也可能不是 Android 中的错误,但我很难找到合适的解决方法。在这里寻求帮助! :)
我只需要启动单个 Activity ,当用户在 navdrawer 中选择一个项目时,该单个 Activity 应该获得 onNewIntent(),而不是新 Activity 的生成!
摆脱 Activity 别名可以解决问题,但这对我来说不是一个可接受的选择...
这是 Activity 从启动器启动后的 adb dumpsys
结果,然后用户在 navdrawer 中选择“Home”直接启动 Activity ,而不是通过别名(此转储确认有两个条目不同的名称):
Main stack:
TaskRecord{4181c408 #61 A ru.treto.tile U 0}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=ru.treto.tile/.HomeActivity }
Hist #2: ActivityRecord{412514b8 ru.treto.tile/.HomeActivity}
Intent { flg=0x24000000 cmp=ru.treto.tile/.HomeActivity }
ProcessRecord{412b06e0 10165:ru.treto.tile/u0a63}
Hist #1: ActivityRecord{41723200 ru.treto.tile/.MainActivity}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=ru.treto.tile/.MainActivity }
ProcessRecord{412b06e0 10165:ru.treto.tile/u0a63}
最佳答案
无需在启动它的类中引用您的 HomeActivity
,您需要更改这些 Intent 以启动“MainActivity
”。
例如:
Intent intent = new Intent();
intent.setClassName(mContext, "ru.treto.tile.MainActivity");
或者,如果您正在使用另一个 IntentFilter
方案,您可以将这些 IntentFilter 元素移动到 list 中的 alias
条目:
<activity-alias
android:name=".MainActivity"
android:target="ru.treto.tile.HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="ru.treto.tile.ACTION_OF_AWESOME" />
</intent-filter>
</activity-alias>
关于android - <activity-alias> 打破了 singleTop 模式的契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28662714/
我有一个 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
我是一名优秀的程序员,十分优秀!