Android WelcomeActivity – 简单版
- 在App启动之后,在WelcomeActivity中显示3秒后跳转到主界面
- WelComeActivity 只显示一次的问题
WelcomeActivity具体代码
public class WelcomeActivity extends AppCompatActivity {
private static final String TAG = WelcomeActivity.class.getSimpleName();
private static final String IS_FIRST = "IS_FIRST";
private static final int MSG_COUNT_WHAT = 1024;
private static final int COUNTDOWN_NUM = 3;
private int countdownNum = COUNTDOWN_NUM;
private static Timer timer;
private CustomHandler mHandler = null;
private Runnable runnable = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
initThread();
}
private void initThread() {
mHandler = new CustomHandler(this);
runnable = new Runnable() {
@Override
public void run() {
timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
countdownNum --;
Message msg = mHandler.obtainMessage();
msg.what = MSG_COUNT_WHAT;
msg.arg1 = countdownNum;
mHandler.sendMessage(msg);
}
};
timer.schedule(timerTask, 0, 1000);
}
};
}
private static void turn2NextActivity(Activity theActivity) {
theActivity.startActivity(new Intent(theActivity, MainActivity.class));
theActivity.finish();
}
/**
* 屏蔽欢迎页面的返回
* @param keyCode 触控事件类型
* @param event 触控事件
* @return true 不再传播该事件, false 未做任何处理, 事件将继续传播
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onResume() {
mHandler.post(runnable);
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
stopThread();
}
static class CustomHandler extends Handler {
private WeakReference<WelcomeActivity> mOuter;
public CustomHandler(WelcomeActivity activity) {
mOuter = new WeakReference<WelcomeActivity>(activity);
}
@Override
public void handleMessage(@NonNull Message msg) {
WelcomeActivity theActivity = mOuter.get();
if (theActivity == null) {
return;
}
switch (msg.what) {
case MSG_COUNT_WHAT:
if (msg.arg1 == 0) {
if (timer != null) {
timer.cancel();
}
turn2NextActivity(theActivity);
} else {
Log.e(TAG, "handleMessage: 还有 " + msg.arg1 + " s");
}
break;
default:
break;
}
}
}
private void stopThread() {
if (timer != null) {
timer.cancel();
}
if (mHandler != null) {
mHandler.removeCallbacks(runnable);
}
}
}
在主界面中通过返回键回到主界面,在进入App时回到返回前的界面
重写Activity的onKeyDown(int keyCode, KeyEvent event)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
- 关于 moveTaskToBack(nonRoot);
- nonRoot == false; Activity 必须是Root Task才可以(如启动的类)
- nonRoot == true; 没有任何限制