android - 由第三方通过“共享列表”调用。如何防止创建多个 Activity 实例?
问题描述
我的应用程序有两个活动:
1.LoadingActivity:它用于接收来自其他应用程序的数据。
2.MainPageActivity:当LoadingActivity完成数据处理后,进入MainPageActivity并显示结果。
我的目的是让我的应用程序在被其他应用程序调用时保持在前台和唯一的一个活动实例上。
如果我的应用程序在后台,当用户在共享列表中选择我的应用程序时,我的应用程序将在前台并显示结果。
如果我的应用程序没有打开,当用户在共享列表中选择我的应用程序时,我的应用程序将被打开并在前台显示结果。
为了满足要求,我执行如下代码。
我遇到了问题:
我的应用程序在后台运行。
如果从“文本副本”获取共享数据,isTaskRoot()总是返回true。(被多次调用,会有多个活动实例)但是,如果从“谷歌地图共享位置”获取共享数据,isTaskRoot()返回false,不创建另一个活动实例。
这两种“共享”情况有什么区别?
我的代码:1.Androidmanifest.xml
<activity android:name="com.test.activities.LoadingActivity"
android:configChanges="orientation|screenSize" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<intent-filter>
<action android:name="android.intent.action.SEND"></action>
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
2.LoadingActivity.java
public class LoadingScreenActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
...
if (!isTaskRoot()) {
check3rdRequest(false, null);
finish();
return;
}
...
}
解决方案
在单独的活动中显示加载程序有点硬核。请考虑在所有内容之上使用片段/片段对话框/ ProgressView。
然后,要回答您的问题,请考虑添加
android:launchMode= "singleInstance"
到清单
推荐阅读
- powershell - 在 PowerShell 命令中搜索字符串替换变量
- c# - 如何将文件夹从 dotnet core 项目复制到发布文件夹。特别是 .cshtml 文件
- python - 为简单环形目标上的弹孔分配分数
- c# - 防止用户更改 TreeView 中的复选框
- tensorflow - 神经网络误差随每个时期振荡,可接受的余量是多少?
- latex - 在 Latex 中使用 pagesel 的未定义引用
- python - Python Pandas:基于一列删除重复行并连接多列中的信息
- assembly - 与存储内存的顺序有什么关系
- r - r markdown 中的 4 级和 5 级标题呈现问题
- python - 在 Colab 上保存多个文件 - cp: cannot stat 'path': No such file or directory