需求:现有闪屏界面SplashActivity,要求在无后台运行APP的情况下,点开应用,首先出现闪屏,2秒过后,进入到主功能界面MianActivity,运行时,将APP关至后台,再次点击图标,返回到当初退出时的界面。
SplashActivity:
public class SplashActivity extends AppCompatActivity {
private Handler handler = new Handler();
private Runnable runnableToLogin = new Runnable() {
@Override
public void run() {
toMainActivity();
}
};
// private Button jumpToMainButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
//重要代码
if (!isTaskRoot()) {
finish();
return;
}
initView();
// initEvent();
//延迟2秒
handler.postDelayed(runnableToLogin,2000);
}
//初始化组件
public void initView(){
// jumpToMainButton = findViewById(R.id.JumpToMainButton);
}
//监听事件
// public void initEvent(){
// jumpToMainButton.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// //防止LoginActivity被打开两次
// handler.removeCallbacks(runnableToLogin);
// toMainActivity();
// }
// });
// }
/**
* 跳转到登录界面
*/
private void toMainActivity(){
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
//防止内存泄漏
handler.removeCallbacks(runnableToLogin);
}
}
这里有一个跳过按钮,点击按钮,直接跳到主界面,无需等待2秒,项目中不需要,隐藏掉了。
MainActivity:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(false);
return false;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
moveTaskToBack(false);
super.onBackPressed();
}
最后在AndroidManifest.xml中注册时:
<activity
android:name=".Activity.SplashActivity"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustPan"
tools:ignore="InnerclassSeparator">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Activity.MainActivity"
tools:ignore="InnerclassSeparator" />
即可。