我正在使用Google DrawerLayout
。優化抽屜和活動啓動速度
當一件物品被點擊時,抽屜會順利關閉,並且會啓動一個Activity
。將這些活動轉換爲Fragment
s是而不是的一個選項。因此,啓動一項活動然後關閉抽屜也不是一種選擇。關閉抽屜並同時啓動活動將使閉幕動畫結束。
鑑於我想先平滑地關閉它,然後啓動該活動,我在用戶點擊抽屜項目以及他們看到他們想要去的活動之間的延遲時間存在問題。
這是每個項目的點擊偵聽器的樣子。
final View.OnClickListener mainItemClickListener = new View.OnClickListener() {
@Override
public void onClick(final View v) {
mViewToLaunch = v;
mDrawerLayout.closeDrawers();
}
};
我的活動也是DrawerListener,其onDrawerClosed
方法是這樣的:
@Override
public synchronized void onDrawerClosed(final View view) {
if (mViewToLaunch != null) {
onDrawerItemSelection(mViewToLaunch);
mViewToLaunch = null;
}
}
onDrawerItemSelection
剛剛推出五大活動之一。
我對DrawerActivity
的沒做任何事。
我正在測試這個,從onClick被調用的那一刻開始,平均需要500-650ms,直到onDrawerClosed結束。
一旦抽屜關閉,在相應的活動啓動之前,會有明顯的滯後。
我認識一對夫婦的事情正在發生:
閉幕動畫發生,這是幾毫秒就在那裏(假設300)。
然後,抽屜的視覺關閉和其監聽器之間可能會出現一些延遲。我試圖找出究竟有多少這種情況by looking at
DrawerLayout
source,但還沒有弄清楚。然後,啓動的活動執行其啓動生命週期方法所需的時間量達到幷包括
onResume
。我還沒有檢測到這一點,但我估計大約200-300毫秒。
這看起來像是一個問題,走錯路將會非常昂貴,所以我想確保我完全理解它。
一個解決方案就是跳過關閉動畫,但我希望能夠保持它。
如何儘可能減少我的轉換時間?
*如何儘可能多的減少我的過渡時間儘可能* - 您可以使用'onDrawerSlide()'這樣https://gist.github.com/luksprog/6316295,我不知道會爲你節省多少。另外,你在'scheduleLaunchAndCloseDrawer(v);'和抽屜活動的'onPause()'中做什麼? – Luksprog
inScheduleLaunchAndCloseDrawer我只是存儲對視圖的引用。我後來匹配它的ID以確定要啓動哪個活動。我什麼也不做。我試過在onDrawerSlide中做,但它也會結結巴巴。我試圖超過80%的某個門檻。 – yarian
我想明天嘗試一下,發佈一個可運行的程序,以在某個預定的延遲時間(比如說350-400ms)啓動該程序。這可能仍然是結結巴巴的,本質上,目標是減少抽屜關閉和聽衆被解僱爲零之間的延遲。當我嘗試時我會更新問題。 – yarian