Android 活动意图将另一项活动带到前台
我正在创建自定义应用程序快捷方式的意图,如下所示:Android 活动意图将另一项活动带到前台,android,android-intent,android-activity,Android,Android Intent,Android Activity,我正在创建自定义应用程序快捷方式的意图,如下所示: Intent.ShortcutIconResource icon = ...; Intent intent = new Intent(); Intent launchIntent = new Intent(getThis(), HandleShortcutActivity.class); // add a few user settings public class HandleShortcutActivity extends AppComp
Intent.ShortcutIconResource icon = ...;
Intent intent = new Intent();
Intent launchIntent = new Intent(getThis(), HandleShortcutActivity.class);
// add a few user settings
public class HandleShortcutActivity extends AppCompatActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_helper);
// get data from intent
// ...
// handle the action
// ...
// finish this activity instantly again
finish();
}
}
该活动处理如下意图:
Intent.ShortcutIconResource icon = ...;
Intent intent = new Intent();
Intent launchIntent = new Intent(getThis(), HandleShortcutActivity.class);
// add a few user settings
public class HandleShortcutActivity extends AppCompatActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_helper);
// get data from intent
// ...
// handle the action
// ...
// finish this activity instantly again
finish();
}
}
这是我的清单:
<activity
android:name=".activities.MainActivity"
android:windowSoftInputMode="adjustPan"
android:launchMode="singleTask"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activities.HandleShortcutActivity"
android:configChanges="orientation|screenSize"
android:excludeFromRecents="true"
android:noHistory="true"
android:theme="@style/Theme.Transparent"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
问题
如果
MainActivity
正在后台运行,并且我的快捷方式意图已启动,则我的MainActivity
应该放在前面。为什么?如何避免这种情况?从清单文件中的活动
声明中删除android:launchMode=“singleTask”
。
此启动模式搜索任务堆栈中的
Activity
,如果可用,则从堆栈中获取,而不是创建MainActivity
的新实例更新清单
<activity
android:name=".activities.MainActivity"
android:windowSoftInputMode="adjustPan"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
此处需要设置“任务关联”,以便将任务创建为与
main活动无关的新堆栈的一部分。然后,当您finish()
it时,它将关闭HandleShortcutActivity
,而不是“返回”到main活动
以下为:
android:taskAffinity
活动与之有关联的任务。与联合国的活动
从概念上讲,相同的亲缘关系属于相同的任务(属于相同的
“应用程序”(从用户的角度)。任务的相关性是
由其根活动的亲和力决定。亲和力
确定两件事—活动重新设置父级的任务
(请参见allowTaskReparenting属性)和将包含的任务
启动时带有标志“活动”\u“新建任务”标志的“活动”
默认情况下,应用程序中的所有活动都具有相同的关联性。
您可以设置此属性以对其进行不同的分组,甚至放置
在同一任务的不同应用程序中定义的活动。到
指定该活动不具有任何任务的关联性,设置
将其转换为空字符串
如果未设置此属性,则活动将继承关联集
对于应用程序(请参见元素的taskAffinity
属性)。应用程序的默认关联的名称是
由元素设置的包名称
添加taskAffinity后,清单文件中的HandleShortcutActivity:
<activity
android:name=".activities.HandleShortcutActivity"
android:configChanges="orientation|screenSize"
android:excludeFromRecents="true"
android:noHistory="true"
android:theme="@style/Theme.Transparent"
android:launchMode="singleTask"
android:taskAffinity="">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
我发现在理解不同的Android启动模式时非常有用,并且非常连贯地解释了您可能面临的各种场景。为什么您要完成();您在onCreate()?@MohdSaquib中的活动,因为快捷方式操作已被处理,并且不需要任何类似活动的可视界面问题在于清单代码删除android:launchMode=“singleTask”