本来觉得Android应用的启动界面就几秒钟,也就显示一张图片,判断一下用户是不是第一次使用,如果第一次使用就在进入主界面之前先进入引导界面,否则直接进入主界面,如果还想从服务器加载图片在UI线程中干也没太大问题,怎么说几行也就搞定了,但是,但是我竟然手贱的写了近130行,主要是进行了载入时间的判断、点击直接进入等操作,下面是源码:

public class SplashActivity extends Activity {    private static final int SHOW_TIME_MIN = 3000;    private static long mStartTime;    private static boolean isFirstUse;    private boolean isLoadingFinished;    private Handler mHandler = new SplashActivityHandler(this);    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_splash);        mStartTime = System.currentTimeMillis();        startLoadingTask();    }    @Override    public boolean onTouchEvent(MotionEvent event) {        if (event.getAction() == MotionEvent.ACTION_UP) {            if (isLoadingFinished) {                mHandler.sendMessage(mHandler.obtainMessage(2));            }        }        return super.onTouchEvent(event);    }    private void startLoadingTask() {        new LoadingTask().execute();    }    private class LoadingTask extends AsyncTask<Void, Void, Void> {        @Override        protected void onPreExecute() {            super.onPreExecute();        }        @Override        protected void onPostExecute(Void aVoid) {            super.onPostExecute(aVoid);            isLoadingFinished = true;            mHandler.sendMessage(mHandler.obtainMessage(1));        }        @Override        protected Void doInBackground(Void... params) {            SharedPreferences preferences = getSharedPreferences("user", Context.MODE_PRIVATE);            isFirstUse = preferences.getBoolean("isFirstUse", true);            try {                Thread.sleep(5000);            } catch (InterruptedException e) {                e.printStackTrace();            }            return null;        }    }    private static class SplashActivityHandler extends Handler {        WeakReference<SplashActivity> splashActivityWeakReference;        SplashActivityHandler(SplashActivity splashActivity) {            splashActivityWeakReference = new WeakReference<SplashActivity>(splashActivity);        }        @Override        public void handleMessage(android.os.Message msg) {            switch (msg.what) {                case 1:                    long loadingTime = System.currentTimeMillis() - mStartTime;                    if (loadingTime < SHOW_TIME_MIN) {                        postDelayed(switchActivity, SHOW_TIME_MIN                                - loadingTime);                    } else {                        post(switchActivity);                    }                    break;                case 2:                    if (switchActivity != null) {                        removeCallbacks(switchActivity);                    }                    post(switchActivity);                    break;                default:                    break;            }            removeMessages(1);        }        Runnable switchActivity = new Runnable() {            @Override            public void run() {                if (isFirstUse) {                    SplashActivity splashActivity = splashActivityWeakReference.get();                    SharedPreferences preferences = splashActivity.getSharedPreferences("user", Context.MODE_PRIVATE);                    SharedPreferences.Editor editor = preferences.edit();                    editor.putBoolean("isFirstUse", false);                    editor.commit();                    splashActivity.startActivity(new Intent(splashActivity,                            GuideActivity.class));                    splashActivity.finish();                } else {                    SplashActivity splashActivity = splashActivityWeakReference.get();                    splashActivity.startActivity(new Intent(splashActivity,                            MainActivity.class));                    splashActivity.finish();                }            }        };    }}
其中,利用线程睡眠5s来模仿访问服务器的耗时操作,如果时间短了会延时到3s进入(此时可以点击页面直接进入)。如果时间长了,例如10s,那么10s才进入。

如果代码有问题,还望各位指出,我好学习一下。

更多相关文章

  1. Android(安卓)和H5之间的交互-框架篇
  2. Android进阶知识树——Android消息队列
  3. Android基于IIS的APK下载(四)数据下载
  4. iOS学习计划——轻松开心慢慢来
  5. Android实现通用的ActivityGroup(效果类似Android微博客户端主界
  6. Android的Handler机制
  7. 将app变为桌面程序,开机后不再显示原桌面,而是显示我们的app界面
  8. Android开发之天气预报(四)UI界面实现
  9. Android参考书籍

随机推荐

  1. Android(安卓)异步加载图片(扩展后)
  2. Android(安卓)为图片添加文字水印
  3. android之网络资源多线程下载
  4. Android利用SQLite制作最简单成语小词典
  5. Android一直震动源码
  6. Android(安卓)休眠与唤醒
  7. Android(安卓)boot process stub
  8. Google Android's Gingerbread Update Co
  9. setting proxy for Android(安卓)SDK Man
  10. Android采用SAX解析XML文档