Launcher页:
AndroidManifest.xml:
<activity
android:name=".modules.main.ui.activity.StartActivity"
android:label="${APP_NAME}"
android:screenOrientation="portrait" //只竖屏显示
android:windowSoftInputMode="adjustPan|stateAlwaysHidden"> //设置系统键盘状态,使该Activity从不被键盘遮盖
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> //入口Activity
</intent-filter>
<intent-filter>
<data android:scheme="colorv" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
StartActivity.java:
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_start); //一张只有ImageView的Layout
//.....初始化......
waitAndGoNext();
停留2S跳转:
private void waitAndGoNext() {
// 停留2秒后跳转
Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
if (!goon) {
return;
}
if (ApplicationCache.pushHelper != null) {
LogUtils.println("--push----------------------------------handle push helper in StartActivity");
ApplicationCache.pushHelper.handlePush(StartActivity.this);
ApplicationCache.pushHelper = null;
return;
}
LogUtils.println("--push----------------------------------handle StartActivity normally");
if (ApplicationCache.newUser || ApplicationCache.updateUser) { //若是新用户或者不是最新版本需要更新的用户,执行goGuide,否则启动到主页
goGuide();
} else {
goMainActivity(); //启动到主页
}
}
}, wait);
}
启动到主页:
private void goMainActivity() {
Intent it = new Intent(StartActivity.this, MainActivity.class);
it.putExtra("from_start", true);
startActivity(it);
finish();
overridePendingTransition(R.anim.fadein, R.anim.fadeout); //该用法切换Activity时触发,两个animation的效果分别为当前Activity退出时的效果和新的Activity打开时的效果
}
如果APP初始化还没完成,显示进度Dialog,执行Check,否则启动主页
private void goGuide() {
if (!CacheUtils.INS.isAppInited()) { //初始化状态boolean值存储在SharePreFerence中
mPd = AppUtil.showProgressDialog(this, MyApplication.getToString(R.string.initialization_data));
check();
} else {
goMainActivity();
}
}
开启一个AsyncTastk,每0.1秒check下是不是完成了APP的初始化。若完成初始化return true,若超过60s还没完成return false,弹启动失败的Toast并Finish。
private void check() {
new AsyncTask<String, Boolean, Boolean>() {
@Override
protected Boolean doInBackground(String... params) {
long waiting = 0;
while (!CacheUtils.INS.isAppInited()) {
try {
long time = 100;
Thread.sleep(time);
waiting += time;
} catch (InterruptedException e) {
e.printStackTrace();
}
if (waiting > 60000) {
return false;
}
}
return true;
}
@Override
protected void onPostExecute(Boolean success) {
AppUtil.safeDismiss(mPd);
if (success) {
goMainActivity();
} else {
ToastUtils.toastAbove(StartActivity.this, MyApplication.getToString(R.string.initialization_data_fail));
StartActivity.this.finish();
}
}
}.execute();
}