/** * 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(); } }
时间: 2024-10-13 08:18:58