在使用Android导览(Android Navigation component)碰到很多问题。解决了一些问题,但是“Skipped xxx frames! The application may be doing too much work on its main thread”这样的的问题一直没有解决。
参考Android Developer: Migrate to the Navigation component: Migrate to the Navigation component 和
Android Developer: Get started with the Navigation component,可以创建navigation graph
方便地对Fragment进行管理。
NavController cannot find an ID
Caused by: java.lang.IllegalArgumentException: ID does not reference a View inside this Activity
java.lang.IllegalArgumentException: ID未引用此活动中的视图
xxx does not have a NavController set on xxx
对于碰到的以上的问题,都差不多,是获取Controller时的出现的问题,参考Android开发 报错: xxx does not have a NavController set on xxx,以下代码可以解决:
@Overrideprotected void onStart() {super.onStart();mController = Navigation.findNavController(MainActivity.this, R.id.nav_host_fragment);}
或者:
public void navigate(@IdRes int resId, @Nullable Bundle args) {try {navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);mController = navHostFragment.getNavController();mController.navigate(resId, args);} catch (IllegalStateException | IllegalArgumentException ex) {Log.e(TAG_NAV, String.format("Unable to navigate to destination. %s", ex.getMessage()));}}
对于以下碰到的问题始终没有解决:
一种说法是创建多线程或者异步任务可以解决,但是试了一下好像不行。
另一种说法是Android应用运行时图片资源过大加载导致处理不过来。
其中drawable-nodpi
是不会进行缩放的,结果试了这种办法也是不行。
创建一个新的分辨率的资源如下:
yourprojectname->app->src->main->res-> New->Image Asset-> select your resolution image required
Android Developer: Migrate to the Navigation component: Migrate to the Navigation component
Android Developer: Get started with the Navigation component
Stackoverflow: Why does my NavController cannot find an ID that I already have?
找不到.findNavController()的正确上下文
Android开发 报错: xxx does not have a NavController set on xxx
Stackoverflow: The application may be doing too much work on its main thread
13、主线程任务太多导致异常退出(The application may be doing too much work on its main thread)
Stackoverflow: Will a density qualified drawable folder or drawable-nodpi take precedence?