我正在使用谷歌DrawerLayout
。
当一个项目被点击时,抽屉会平滑关闭并Activity
启动。将这些活动变成Fragment
s不是一种选择。因此,启动活动然后关闭抽屉也不是一种选择。同时关闭抽屉并启动 Activity 会使关闭动画卡顿。
鉴于我想先平稳地关闭它,然后启动活动,我遇到了用户单击抽屉项目和他们看到他们想要去的活动之间的延迟问题。
这就是每个项目的点击监听器的样子。
final View.OnClickListener mainItemClickListener = new View.OnClickListener() {
@Override
public void onClick(final View v) {
mViewToLaunch = v;
mDrawerLayout.closeDrawers();
}
};
我的activity也是DrawerListener,它的onDrawerClosed
方法如下:
@Override
public synchronized void onDrawerClosed(final View view) {
if (mViewToLaunch != null) {
onDrawerItemSelection(mViewToLaunch);
mViewToLaunch = null;
}
}
onDrawerItemSelection
只是启动了五项活动之一。
我什么都不onPause
做DrawerActivity
。
我正在对此进行检测,从调用 onClick 的那一刻到 onDrawerClosed 结束的那一刻平均需要 500-650 毫秒。
一旦抽屉关闭,在相应的活动启动之前会有一个明显的延迟。
我意识到有几件事正在发生:
关闭动画发生,这是几毫秒的时间(比如说 300)。
然后抽屉在视觉上关闭和它的监听器被触发之间可能存在一些延迟。我试图通过查看
DrawerLayout
源代码来弄清楚到底发生了多少,但还没有弄清楚。然后是启动的活动执行其启动生命周期方法所需的时间,包括
onResume
. 我还没有对此进行检测,但我估计大约需要 200-300 毫秒。
这似乎是一个问题,如果走错路会非常昂贵,所以我想确保我完全理解它。
一种解决方案是跳过结束动画,但我希望保留它。
如何尽可能减少过渡时间?