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
5 つのアクティビティのうちの 1 つを開始するだけです。
私は何もしませonPause
んDrawerActivity
。
私はこれを計測しており、onClick が呼び出された瞬間から onDrawerClosed が終了する瞬間まで、平均で 500 ~ 650 ミリ秒かかります。
ドロワーが閉じてから、対応するアクティビティが開始されるまでに、顕著な遅延があります。
いくつかのことが起こっていることに気づきました:
数ミリ秒 (300 としましょう) の終了アニメーションが発生します。
次に、ドロワーが視覚的に閉じてからそのリスナーが起動するまでに、おそらくある程度の待ち時間があります。ソースを見て
DrawerLayout
、これがどの程度起こっているかを正確に把握しようとしていますが、まだ把握していません。次に、起動されたアクティビティがスタートアップ ライフサイクル メソッドを実行するのにかかる時間 (最大 を含む) があり
onResume
ます。これはまだ計測していませんが、約 200 ~ 300 ミリ秒と見積もっています。
これは、間違った道をたどると非常にコストがかかる問題のように思えるので、完全に理解したいと思います。
解決策の 1 つは、終了時のアニメーションをスキップすることですが、そのままにしておきたいと思っていました。
移行時間をできるだけ短縮するにはどうすればよいですか?