我想知道 singleInstance 活动的默认任务亲和力是什么?
由于每个 singleInstance Activity 在新任务中作为根 Activity 打开。并且无需声明 android:taskAffinity。
请参阅我已阅读 Android Activity 的开发人员指南和文档。
https://developer.android.com/guide/components/activities/tasks-and-back-stack 和 https://developer.android.com/guide/topics/manifest/activity-element.html#aff
<activity android:name=".MainActivity"
android:launchMode="singleInstance"
>
</activity>
Run Code Online (Sandbox Code Playgroud)
我想知道该任务的 taskAffinity - 字符串文字,其中 singleInstance 活动作为根驻留在其中。
在我的应用程序中,我有:
-SplashScreen(SSc)准备应用程序(启动服务等)-MainActivity(MA)应用程序中最相关的部分,用于处理大多数操作-以及其他一些不相关的活动
对于我的应用程序,我希望具有类似launchMode singleTask的行为,以便即使通过链接打开我的应用程序,它也总是作为一个新任务启动,请在SMS / EMail应用程序中单击。最好是只有一个我的活动实例,因为它们都是可以连续导航的。
但是,当我以singleTask身份启动SSc时,它是堆栈的根并导航到MainActivity,按Home键,再次单击Launcher图标,应用程序将完全重新启动。因此,再次显示SSc,依此类推。在这种情况下,我希望将MainActivty放在首位。
我的愿望是:launcherclick-> SSc-> MA-> HOME-> launcherclick->将MA置于最前面-> HOME->从最近的站点重新启动->将MA置于最前面
单击具有相同实例的链接-> SSc / MA(是否首次启动)
在我的应用程序中,有多个实例是没有意义的,因为后台服务一次只能处理一个MainActivity,因为它仅针对可见的“事物”轮询数据。
您对实现这个目标有什么建议吗?
我的第一个想法是带有launchMode singletask的LauncherActivity,它没有布局以将意图路由到其他活动(最有可能是singleTop!?,因为它仅在一个任务中),例如:
public class LauncherActivity extends Activity {
private boolean firstStart = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
super.onResume();
if(firstStart){
startActivity(new Intent(this, SplashScreen.class));
firstStart = false;
} else {
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
清单xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="x.startintenttest">
<application
android:allowBackup="true"
android:allowTaskReparenting="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity …Run Code Online (Sandbox Code Playgroud) 我有一个活动 A,当我按下工具栏项时,它使用 startActivity(intent) 启动活动 B。每当我按下后退按钮或向上导航图标时,它都会关闭我的应用程序。我相信这是因为我在我的父活动中使用了 launchMode="singleTop"(我使用它是因为我有一个搜索视图和一个可搜索的配置,因为我不想开始我的另一个活动实例进行搜索)。所以问题是:如何在不关闭我的应用程序的情况下使用向上导航和后退按钮从子活动(B)返回到父活动(A)?我已经搜索过了,我发现了一些关于 onNewIntent() 的信息。如果这是我的解决方案,我应该如何正确使用它?
这是我的清单文件:
<activity
android:name="com.example.fernando.inspectionrover.MainActivity"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity
android:name="com.example.fernando.inspectionrover.BluetoothSettingsActivity"
android:parentActivityName="com.example.fernando.inspectionrover.MainActivity"
android:screenOrientation="landscape">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.fernando.inspectionrover.MainActivity" />
Run Code Online (Sandbox Code Playgroud)
以下是如何开始我的新活动:
switch (id) {
case R.id.bluetoothActivity:
Intent switchActivity = new Intent(this, BluetoothSettingsActivity.class);
startActivity(switchActivity);
Log.i(LIFE_CYCLE, "Switching from " + getLocalClassName() + " to Bluetooth Setting Activity");
finish();
break;
}
Run Code Online (Sandbox Code Playgroud) 我有一个带有MainActivity和ChildAaActivity的应用程序ChildBbActivity。
MainActivity 可以将我们发送到任一子活动,并且用户可以根据需要在两个子活动之间移动。
但是,其中每一项活动只能有一个实例。
问题是,如果我创建子活动singleInstance,那么它们都是单独的任务,切换到另一个应用程序并返回到子活动意味着onBackPress我退出该应用程序(当我应该返回 MainActivity 时)
如果我launchMode按照标准离开,那么我会得到多个子活动实例,尤其是在两个孩子之间来回移动时。
如果我使用singleTop,那么我就会遇到这两个问题
如果我noHistory对孩子们使用,我无法在他们之间自由移动(第一次后按将使我返回到 MainActivity)
使用isTaskRoot()显然不会修复singleInstance应用程序退出错误,因为它始终为真(并且对于其他场景没有用)
我应该如何正确实现我需要的行为?
我正在玩Android,当我测试不同的活动/意图标志或启动模式时,我无法获得预期的行为(特别是当不同的活动有不同的标志时).我已经非常仔细地阅读了Google Dev Guide,但仍无法解释我得到的结果.
我想知道如果有一些调试工具或某些方法我可以实时检查不同任务的后台?
Looking forward to your expertise or comments.
Run Code Online (Sandbox Code Playgroud)
谢谢.
我对 Android 中的不同活动启动模式感到非常困惑。我知道它与活动堆栈有关,这对我来说也不太清楚。我希望通过一个简单的用例对每个 launchMode 进行简短的解释。
<activity
android:name=".activity.landingpage.LandingPageActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
所以很简单.当我从启动器图标打开我的应用程序,它opens.I去点击启动我的应用程序图标再次再次带来了我的申请前自open.However,如果我去Play商店,点击打开从那里我的应用程序有两个实例打开.如果你想要一个如何工作的例子,facebook也有同样的问题.另外一个app fotmob也有同样的问题.