我有一个场景。我正在尝试使用我创建的PinActivity
锁定我的应用程序。我正在运行一个具有计数器计时器5分钟的服务。如果用户在应用程序中没有活动5分钟。我将向他展示他必须解锁并进入应用程序的PINActivity。我正在推出PINActivity
,就像这样:
Intent loginIntent = new Intent(this, PINActivity.class);
loginIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(loginIntent);
因此,当用户回到应用程序并看到PINActivity
时,他将解锁并进入应用程序。但是如果用户没有输入PIN并再次离开应用程序理想超过5分钟(注意:我的服务在用户将应用程序带到前台时启动计数器计时器)。我不想在顶部添加相同PINActivity
的多个实例。我怎样才能确保顶部只有一个PINActivity
?
答案 0 :(得分:3)
在清单
中添加android:launchMode="singleInstance"
<activity
android:name=".MainActivity"
android:launchMode="singleInstance"/>
答案 1 :(得分:1)
在清单中的活动中添加 launchMode =&#34; singleInstance&#34; ,如下所示:
<activity
android:launchMode="singleInstance"
android:name=".MainActivity"
..... />
答案 2 :(得分:1)
您应该使用FLAG_ACTIVITY_SINGLE_TOP
。如果堆栈顶部已存在PINActivity
的实例,则会阻止Android启动PINActivity
。
Intent loginIntent = new Intent(this, PINActivity.class);
loginIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP);
startActivity(loginIntent);
请不要像其他人建议的那样尝试使用singleTask
或singleInstance
等特殊启动模式。这不会给你带来帮助,也会让你的问题复杂化。
您也可以在android:launchMode="singleTop"
的清单条目中指定PINActivity
。这与FLAG_ACTIVITY_SINGLE_TOP
具有相同的效果。
答案 3 :(得分:0)
启动活动时,您可以使用此功能:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_centerVertical="true"
android:background="@drawable/menu_counter"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textColor="#ffffff" />
</RelativeLayout>
如果活动已经存在,那么它将使用相同的实例,否则创建新实例,并且不存在重复。
答案 4 :(得分:0)
您需要在清单中设置launchmode。据我所知,有3个选项可以满足您的需求,但您应该看哪一个更适合您。
singleTop 下一个模式是singleTop。它的行为与标准行为几乎相同,这意味着可以根据需要创建singleTop Activity实例。唯一不同的是,如果在调用者任务中堆栈顶部已经存在具有相同类型的Activity实例,则不会创建任何新的Activity,而是通过onNewIntent()方法将Intent发送到现有的Activity实例。
singleTask 此模式与标准和singleTop完全不同。具有singleTask launchMode的Activity允许在系统中只有一个实例(a.k.a. Singleton)。如果系统中存在一个Activity实例,则整个Task保持实例将移动到顶部,而Intent将通过onNewIntent()方法传递。否则,将创建新的活动并将其放置在适当的任务中。
在你的活动清单中添加
android:launchMode="oneOfTheAbove"
它应该是这样的:
<activity
android:name=".ui.activities.PINActivity"
android:launchMode="singleTask"/>
答案 5 :(得分:0)