解释一下 public void onConfigurationChanged(Configuration newConfig) { ThreadUtils.checkOnMainThread(); // ensure the old view is removed from activity view ensureNoParent(launcherViewsUi.getRootView()); // Destroy the old view launcherViewsUi.onDestroy(); // preload a new view onto LauncherViewsUi ListenableFuture<Void> loadingFuture = preloadCache(); loadingFuture.addListener( new AbstractCwRunnable(TAG + "#LauncherViewsUiManager.onConfigurationChanged") { @Override public void run() { final ViewGroup activityView = RecentAppViewsUiManager.this.activityView; // if activity is present, attach the new view onto the activity if (activityView != null) { addUiRootViewToActivityView(activityView); } } }, executors.getUiExecutor()); }
时间: 2024-02-10 16:33:08 浏览: 111
Android笔记之:onConfigurationChanged详解
这是一个在配置发生变化时被调用的方法,它在RecentAppViewsUiManager类中实现了ComponentCallbacks接口的方法。
首先,该方法使用ThreadUtils.checkOnMainThread()方法检查当前线程是否为主线程,如果不是,则会抛出异常。
接下来,该方法会确保UI组件不再绑定到Activity上,这是通过ensureNoParent(launcherViewsUi.getRootView())方法实现的。该方法会检查UI组件的根视图是否有父视图(即是否已经绑定到Activity上),如果有,则会调用removeView()方法将其从Activity中移除。
然后,该方法调用launcherViewsUi.onDestroy()方法销毁旧的UI组件,以便为新的UI组件腾出空间。
接着,该方法通过调用preloadCache()方法异步预加载新的UI组件,并将返回的ListenableFuture对象添加一个监听器,在异步加载完成后进行回调。该方法传递了一个AbstractCwRunnable对象和一个UI线程执行器作为参数,以便在UI线程中更新UI。
最后,该方法会将新的UI组件添加到Activity中,这是通过调用addUiRootViewToActivityView(activityView)方法实现的。如果当前Activity已经创建,则将新的UI组件添加到Activity中;否则,会等待Activity创建完成后再进行添加。
阅读全文