首页 > 代码库 > 手机影音1--SplashActivity

手机影音1--SplashActivity

/**
 * 1.设置被启动的Activity为单例模式
 */

public class SplashActivity extends Activity {

    /**
     * 是否已经启动主页面
     */
    private boolean isStartMain = false;

    private static final String TAG = SplashActivity.class.getSimpleName();

    private  Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //这个方法执行是在主线程
                Log.e(TAG, "当前线程的名称:" + Thread.currentThread().getName());
                startMainActivity();
            }
        }, 3000);
    }

    /**
     * 启动主页面
     */
    private void startMainActivity() {
        if(!isStartMain){
            isStartMain = true;
            Intent intent = new Intent(this,MainActivity.class);
            startActivity(intent);
            finish();//关闭当前页面
        }
    }

    @Override
    protected void onDestroy() {
//       isStartMain = true;
         handler.removeCallbacksAndMessages(null);//把消息队列里面的所有回调和消息移除
          super.onDestroy();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        startMainActivity();
        return super.onTouchEvent(event);
    }
} 

1.Handler在哪个线程new,Runnable就在哪个线程执行  

 

2.有一个bug,启动了多次Activity,如何解决?

 方法①.设置为启动的Activity只能是单例。
  在功能清单文件android:launchMode="singleTask"
 方法②.从源头上控制,执行代码只一次

private boolean isStartMain = false;
/**
 * 跳转到主页面,并且把当前页面关闭掉
 */
private void startMainActivity() {
	if(!isStartMain){
		isStartMain = true;
		Intent intent = new Intent(this,MainActivity.class);
		startActivity(intent);
		//关闭当前页面
		finish();
	}
}

  

 

手机影音1--SplashActivity