我改变了@dunnololz在答案中指出的逻辑。但是现在即使应用程序正在运行,也会在点击启动器图标时出现Splash。 我希望第一次当应用程序没有运行时,会显示其他登录活动,但这不会发生。
这是我的代码:
清单启动启动器活动:
<activity
android:name=".activities.Splash"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:noHistory="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Splash.Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startService(new Intent(Splash.this, IMService.class));
setContentView(R.layout.activity_splash);
Thread background = new Thread() {
public void run() {
try {
// Thread will sleep for 3 seconds
sleep(3 * 1000);
Intent intent = new Intent(getBaseContext(), Login.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();
} catch (Exception e) {
}
}
};
// start thread
background.start();
}
我正在使用this gist来确定应用是否正在运行。我是通过this tutorial找到的。因此,该类使用Application.ActivityLifecycleCallbacks
作为API级别14+,这是我需要的。
我想做的是:
这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(getBaseContext(), Splash.class);
if (Foreground.get(this).isForeground()
|| Foreground.get(this).isBackground()) {
intent = new Intent(EntryPoint.this, Login.class);
}
startActivity(intent);
finish();
}
这是我的应用程序类:
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Foreground.init(this);
}
}
当然我也将我的应用程序添加到了清单文件中:
<application
android:name=".MyApp"
问题是Splash
活动永远不会启动。它始终是Login
活动。
我只是希望能够做到这一点:
但不确定如何使这个工作,我可能会遗漏一些明显的东西。或者甚至可能是我对either in foreground or background
的要求是错误的,因为我是Android新手。
感谢您的帮助
答案 0 :(得分:2)
通常在Android中,不建议根据应用程序当前是否保留在内存中来确定行为。这就是操作系统应该关注的内容,而不是你想要关注的内容。
在当前版本的Android中(因为我不确定旧版本的这种行为是否属实),当您点击应用程序启动它时,操作系统会检查该应用程序是否已“打开”。如果是,它将恢复“打开”应用程序的状态。如果该应用尚未“开放”,Android将启动在启动器上标记的活动。因此,解决这个问题的方法就是让Android处理它。制作启动活动并将其标记为AndroidManifest.xml
中的启动器。然后让启动器在一段时间后打开您的登录活动。
现在,如果应用已经打开,Android只会恢复上次打开的活动。否则它将显示发射器。