編輯:關於Android編程
StateManager中有個Stack
public void startState(Class extends ActivityState> klass, Bundle data) { Log.v(TAG, "startState " + klass); ActivityState state = null; try { // 用窗口類創建一個ActivityState實例 state = klass.newInstance(); } catch (Exception e) { throw new AssertionError(e); } // 堆棧非空 if (!mStack.isEmpty()) { // 獲取棧頂ActivityState ActivityState top = getTopState(); top.transitionOnNextPause(top.getClass(), klass, StateTransitionAnimation.Transition.Incoming); // 調用棧頂ActivityState的onPause if (mIsResumed) top.onPause(); } // 初始化當前的ActivityState,這個和startActivity非常相似 state.initialize(mActivity, data); // 初始化後入棧 mStack.push(new StateEntry(data, state)); Log.d(TAG, "startState: startState->onCreate"); // 調用新ActivityState實例的onCreate,這個和startActivity的流程又好相似 state.onCreate(data, null); Log.d(TAG, "startState: startState->resume"); // 調用新ActivityState實例的onResume if (mIsResumed) state.resume(); }可以說這個函數和啟動應用activity的流程非常相似,只是簡化了流程而已。另外,startStateForResult也和startActivityForResult類似。 AbstractGalleryActivity 在介紹AlbumSetPage、AlbumPage、PhotoPage等頁面前,必須先介紹AbstractGalleryActivity,因為以上三個頁面的父類ActivityState中有成員變量AbstractGalleryActivity mActivity。相冊的Activity實際上只有一個,可以說就是這個mActivity,通過StateManager和DataManager來控制顯示不同的頁面。
// Shows status bar in portrait view, hide in landscape view private void toggleStatusBarByOrientation() { if (mDisableToggleStatusBar) return; Window win = getWindow(); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { win.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } else { win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } }在setContentView()中加載GLRootView。在onStart()中注冊AlertDialog的onClick處理。在onResume(),onPause()中都會分別對StateManager,DataManager做對應的onResume, onPause操作。例如:
@Override protected void onResume() { super.onResume(); mGLRootView.lockRenderThread(); try { getStateManager().resume(); getDataManager().resume(); } finally { mGLRootView.unlockRenderThread(); } mGLRootView.onResume(); mOrientationManager.resume(); }其中 mGLRootView會調用 lockRenderThread(),在執行完xxx.resume()後會再調用unlockRenderThread()。下面是GLRootView的lockXXX()和unlockXXX()函數。
@Override public void lockRenderThread() { mRenderLock.lock(); } @Override public void unlockRenderThread() { mRenderLock.unlock(); }其中 mRenderLock是ReentrantLock對象。那麼ReentrantLock(可重入鎖)的作用是什麼?
歡迎轉載和技術交流,轉載請幫忙注明出處,http://blog.csdn.net/discovery_by_joseph,謝謝!
先來看看最終的效果~~嗯。。一個是頭像上移的 另一個是模仿UC浏覽器的。基礎概念其實Behavior就是一個應用於View的觀察者模式,一個View跟隨者另一個View的
游戲碰撞的大致可以分為這幾種類 1.主角與邊界的碰撞,限制主角不能走出手機屏幕外。 2.主角與物理層的碰撞,與地圖中的房子 桌子 椅子等
我們首先來說一下傳統的Linux基於uid,gid的權限管理機制:1、用戶的uid gid gids:Ubuntu操作系統當前登陸的用戶是jltxgcy,那麼該用戶的ui
Android 自定義圓形進度條今天無意中發現一個圓形進度,想想自己實現一個,如下圖:基本思路是這樣的:1.首先繪制一個實心圓2.繪制一個白色實心的正方形,遮住實心圓3.