Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么可以';装载机是否为非静态内部类?_Android_Android Loadermanager_Android Loader - Fatal编程技术网

Android 为什么可以';装载机是否为非静态内部类?

Android 为什么可以';装载机是否为非静态内部类?,android,android-loadermanager,android-loader,Android,Android Loadermanager,Android Loader,当我尝试使用非静态的内部加载程序类时,会出现以下运行时错误: 从onCreateLoader返回的对象不能是非静态内部对象 成员类 这一限制的意义是什么?如中所述,它们是专门设计用来经受旋转变化(通常会导致活动被破坏和重新创建)的。由于非静态内部类包含对其包含实例的隐式引用(即,内部类将有对第一个活动的引用),这保证会在任何配置更改时产生内存泄漏。如果我不得不猜测,加载程序本身可能会在配置更改后存活,至少一段时间。通常,“不能是非静态内部类”限制是在我们担心内存泄漏时提出的。也就是说,我不知道为

当我尝试使用非静态的内部
加载程序
类时,会出现以下运行时错误:

从onCreateLoader返回的对象不能是非静态内部对象 成员类


这一限制的意义是什么?

如中所述,它们是专门设计用来经受旋转变化(通常会导致活动被破坏和重新创建)的。由于非静态内部类包含对其包含实例的隐式引用(即,内部类将有对第一个活动的引用),这保证会在任何配置更改时产生内存泄漏。

如果我不得不猜测,
加载程序本身可能会在配置更改后存活,至少一段时间。通常,“不能是非静态内部类”限制是在我们担心内存泄漏时提出的。也就是说,我不知道为什么
加载程序
会在配置更改后幸存下来(尽管它加载的数据应该幸存下来),所以我不知道这是实际的理由。是的,我考虑过内存泄漏,但我不明白为什么在警告足够的情况下它会如此严格地强制执行,除非LoaderManager的内部工作保证会导致泄漏。请,因此在
onCreateLoader()
中,将例如
loadInBackground()
方法扩展为新的内部类,如:
new CursorLoader(mActivity){@Override public Cursor loadInBackground(){…}
也创建对活动的引用?@GPack-如中所示,加载器不直接使用提供的
上下文,而是使用应用程序上下文来防止保留对活动的引用。我的问题不是关于“mActivity”的使用在上下文中,它是关于在Activity/Fragment中通过内部类扩展CursorLoader类及其结果的如果你想要回复,thanks@GPack-是的,这是一个内部类,因此是内存泄漏。好吧,这对我来说非常清楚,但我不明白LoaderManager如何在不泄漏活动/片段的情况下保留对回调的引用(通过
getLoaderManager().initLoader(0,null,this
);)