该属性究竟taskAffinity用于什么?我已经阅读了文档但我无法理解.
任何人都可以解释外行人的任务亲和力吗?
我想在启动时在linux上设置进程的cpu亲和性.
有像sched_setaffinity和taskset这样的方法,但它们需要进程的processid.它们可能导致潜在的迁移,例如在核心上启动进程,但在使用sched_setaffinity/taskset之后,它们被迁移到另一个核心.
我想要做的是从一开始就在特定核心上开始一个新的过程.
假设我们有两个活动.
A - 主要活动,即"启用主启动器"(适当的意图过滤器等)
B - 具有singleTask规范的任务根活动(此活动只能有一个实例)和自定义taskAffinity(用于区分主要任务)根).
假设B代表一个任务,只有当它没有完成时才有效 - 返回它或者在完成它之后从最近的任务再次启动它不是一个选项.
在某些时候 - A开始B开始新任务.目标是在用户完成B时从最近的任务列表中删除B.用户可以从B导航到其他任务(使用主页长按)然后导航回B,只要它没有完成.从启动器启动A不会将B带到前台,因为它们具有不同的任务关联性.
Android将B识别为任务的根,因此即使B已完成,B也会在最近的任务列表中可见,并且用户始终可以返回到该任务.使用A将B移动到一个任务不是解决方案,因为在B运行的时间 - 用户应该能够在A和B任务之间切换.将excludeFromRecents添加到B的清单会将其从最近的任务列表中完全删除,这也是不好的解决方案.
怎么实现呢?(对不起,我的英语不好)
我开发了一个简单的应用程序,它解释了我注意到的Android 4.4.X设备上的一些奇怪的行为.
假设我想要进行2次"主要"活动,其中第一次活动表示"Hello"(通过启动"HelloActivity")每秒恢复一次,第二次android:launchMode="singleTask" android:taskAffinity=".MyAffinity"定义.第二个是由第一个开始的.
清单非常简单:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.affinitylaunchmodebugtest.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="HELLO"
android:name="com.example.affinitylaunchmodebugtest.HelloActivity"
android:configChanges="keyboardHidden|orientation|screenSize">
</activity>
<activity
android:label="AffinityTestActivity"
android:name="com.example.affinitylaunchmodebugtest.AffinityTestActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:taskAffinity=".MyAffinity">
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
MainActivity在按钮单击时启动AffinityTestActivity并记录其生命周期.它还会在每次恢复时启动HelloActivity:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
System.out.println(this+" onCreate");
super.onCreate(savedInstanceState);
Button b = new Button(MainActivity.this);
b.setText("START AFFINITY TEST ACTIVITY");
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View …Run Code Online (Sandbox Code Playgroud) android:taskaffinity属性如何工作?
根据我的理解,按Home键会将活动移动到后台堆栈,但不会被销毁.我很迷惑.
我想知道 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 活动作为根驻留在其中。
我有两个应用程序,应用程序A和应用程序B,现在我想从应用程序A启动应用程序B中的一个活动,该活动的启动模式是\xe2\x80\x9csingleTask\xe2\x80\x9d。
\n顺序:\n活动 X(应用程序 A)\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94> 活动 Y(应用程序 B)\xe2\x80\x94\xe2\x80\x94\xe2\ x80\x94> 活动 Z(应用程序 B,launchMode=\xe2\x80\x9csingleTask\xe2\x80\x9d)
\n默认的 AndroidManifest 配置中,任务管理器中会显示两个应用程序,我希望用户在任务管理器中只能看到应用程序 A 标签,因此当他们在任务之间切换时,不要点击应用程序 B。在 Android 11 之前(Android R),我使用如下属性taskAffinity来解决这个问题。
\nActivity X 和 Activity Z,将其添加到 AndroidManifet.xml 中
\nandroid:taskAffinity="com.abc.xxx\xe2\x80\x9d
因此,这些活动可以同时包含在一项活动任务中。在 Android 10 中,它可以工作。
\n然而,它在 Android11 中不再适用\xe2\x80\x99。而且,我没有\xe2\x80\x99找到任何与这个场景相关的新功能。
\n如何使 ApplicationA\xe2\x80\x99s 活动任务容纳 ApplicationB 的活动,其启动模式为 singleTask?让用户在任务管理器中只能看到一个任务(ApplicationA)。
\nandroid cross-application taskaffinity android-activity android-11
我知道这可能不是最好的做法,但这就是我想要做的.
当我的广播接收器被调用时 - 启动一个不是全屏并且具有透明背景的新活动 - 在您当前的活动/桌面壁纸之上打开.
我到目前为止的代码如下:
我用以下方法创建+调用新活动:
Intent testActivityIntent = new Intent(context, com.andy.tabletsms.work.SMSPopup.class);
testActivityIntent.putExtra("com.andy.tabletsms.message", main.msgs.get(i));
testActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
testActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
context.startActivity(testActivityIntent);
Run Code Online (Sandbox Code Playgroud)
然后活动的主题是:
机器人:主题= "@安卓风格/ Theme.Translucent.NoTitleBar"
而活动的代码只是一个简单布局的沼泽标准活动.然而,当该广播接收器启动活动时 - 它出现在应用程序启动时启动的上一个活动的顶部.....根据此图像显示:
