相关疑难解决方法(0)

Inner Class有一个对外部类的隐式引用,可能会泄漏内存

在了解了内部类之后,我理解它有一个对外部类的隐式引用.

但我的老师告诉我,最好的方法是不使用内部类,更喜欢使用静态内部类.因为内部类可能会泄漏内存.

有人可以解释一下吗?

java static memory-leaks inner-classes

5
推荐指数
1
解决办法
2699
查看次数

尝试在空对象引用上调用虚方法'java.lang.String android.content.Context.getPackageName()'

我有一个Activity,它本身就有三个Fragment.

在其中一个片段中,有一个RecyclerView带有自定义适配器,并且单击其中一个项目将转到另一个页面,这是相同的新实例Activity.但是,某种行为会导致我的应用程序出错.

在我的Activity中,单击其中一个项会显示同一个Activity的新实例,这很好.然后我按下后退按钮,我被带回第一个活动.但是再次单击其中一个项目(以启动相同Activity的新实例)会导致以下错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚方法'java.lang.String android.content.Context.getPackageName()'

同样重要的是要考虑我在我的Activity中的一个片段中调用Activity的新实例(即三个项目的位置).所以,当我打电话给它时,我有类似的东西:

public class MyActivity extends AppCompatActivity {

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        ViewPager viewPager = (ViewPager) findViewById(R.id.detail_viewpager);
        viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
        TabLayout tabLayout = (TabLayout) findViewById(R.id.detail_tabs);
        tabLayout.setTabTextColors(
                ContextCompat.getColor(this, R.color.text_white_secondary),
                ContextCompat.getColor(this, R.color.text_white));
        tabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, R.color.white));
        tabLayout.setupWithViewPager(viewPager);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    }

    ...

    public class ViewPagerAdapter extends FragmentPagerAdapter {

        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return 3;
        }

        @Override
        public Fragment getItem(int position) {
            switch …
Run Code Online (Sandbox Code Playgroud)

android nullpointerexception android-context android-fragments

3
推荐指数
1
解决办法
3万
查看次数

为什么静态内部类可以减少内存泄漏?

我正在阅读高效的 Android 线程,其中说

最好使用静态内部类,而不是使用带有外部类引用的嵌套类,因为它们仅引用全局类对象而不引用实例对象。这只是减轻了泄漏,因为在线程执行时,静态内部类对其他实例对象的所有显式引用仍然有效。

但我不清楚为什么它会减轻泄漏。如果静态内部类对其他实例对象的所有显式引用都处于活动状态,那么这不是与上述解释相反的内存泄漏原因吗?

memory-leaks

3
推荐指数
1
解决办法
4732
查看次数

在 Java 中的一行中创建一个包含键和值的映射

有没有办法同时使用键和值创建映射(我的意思是一行代码)?例如,我创建了一个名为 map 的映射,每当我想添加一对新的键/值时,我都需要使用“put”方法。当我们创建地图时,是否有更短的方法来填充地图?

Map<String, String> map = new HashMap<String, String>();
    map.put("A", "32");
    map.put("C", "34");
    map.put("T", "53");
Run Code Online (Sandbox Code Playgroud)

java dictionary

2
推荐指数
2
解决办法
6542
查看次数