Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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
模拟器崩溃,java.lang.OutOfMemoryError_Java_Android_Out Of Memory - Fatal编程技术网

模拟器崩溃,java.lang.OutOfMemoryError

模拟器崩溃,java.lang.OutOfMemoryError,java,android,out-of-memory,Java,Android,Out Of Memory,对于我的应用程序,我有很多切换方法,比如抽屉。单击抽屉上的3个项目后,第四个项目导致应用程序崩溃,我得到这个错误 java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587) at a

对于我的应用程序,我有很多切换方法,比如抽屉。单击抽屉上的3个项目后,第四个项目导致应用程序崩溃,我得到这个错误

java.lang.OutOfMemoryError
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
        at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
        at android.content.res.Resources.loadDrawable(Resources.java:2110)
        at android.content.res.Resources.getDrawable(Resources.java:700)
        at android.widget.ImageView.resolveUri(ImageView.java:638)
        at android.widget.ImageView.setImageResource(ImageView.java:367)
        at icykum.JasonSafaiyeh.cocg.troopScreen$PlaceholderFragment.onCreateView(troopScreen.java:636)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)
部队屏幕:

public class troopScreen extends ActionBarActivity
        implements TroopNavigationDrawerFragment.NavigationDrawerCallbacks {

    /**
     * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
     */
    private TroopNavigationDrawerFragment mNavigationDrawerFragment;

    /**
     * Used to store the last screen title. For use in {@link #restoreActionBar()}.
     */
    private CharSequence mTitle;
    public int firstTroop = 0,
            secondTroop = 0,
            thirdTroop = 0,
            fourthTroop = 0,
            fifthTroop = 0,
            description = 0,
            troop_costs = 0,
            troop_stats = 0,
            troop_stats2 = 0;

    public String firstTroopText = "",
            secondTroopText = "",
            thirdTroopText = "",
            fourthTroopText = "",
            fifthTroopText = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_troop_screen);

        mNavigationDrawerFragment = (TroopNavigationDrawerFragment)
                getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
        mTitle = getTitle();

        // Set up the drawer.
        mNavigationDrawerFragment.setUp(
                R.id.navigation_drawer,
                (DrawerLayout) findViewById(R.id.drawer_layout));
    }

    @Override
    public void onNavigationDrawerItemSelected(int position) {
        // update the main content by replacing fragments
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
                .commit();
    }

    //Titles
    public String onSectionAttached(int number) {
        switch (number) {
            case 1:
                mTitle = "Barbarian";
                break;
            case 2:
                mTitle = "Archer";
                break;
            case 3:
                mTitle = "Goblin";
                break;
            case 4:
                mTitle = "Giant";
                break;
            case 5:
                mTitle = "Wall Breaker";
                break;
            case 6:
                mTitle = "Balloon";
                break;
            case 7:
                mTitle = "Wizard";
                break;
            case 8:
                mTitle = "Healer";
                break;
            case 9:
                mTitle = "Dragon";
                break;
            case 10:
                mTitle = "P.E.K.K.A";
                break;
            case 11:
                mTitle = "Minion";
                break;
            case 12:
                mTitle = "Hog Rider";
                break;
            case 13:
                mTitle = "Valkyrie";
                break;
            case 14:
                mTitle = "Golem";
                break;
            case 15:
                mTitle = "Witch";
                break;
            case 16:
                mTitle = "Barbarian King";
                break;
            case 17:
                mTitle = "Archer Queen";
                break;
        }
        return (String) mTitle;
    }

    public int getFirstTroop(int number){
        switch(number){
            case 1:
                firstTroop = R.drawable.barb;
                break;
            case 2:
                firstTroop = R.drawable.archer;
                break;
            case 3:
                firstTroop = R.drawable.goblin;
                break;
            case 4:
                firstTroop = R.drawable.giant;
                break;
            case 5:
                firstTroop = R.drawable.wb;
                break;
            case 6:
                firstTroop = R.drawable.balloon;
                break;
            case 7:
                firstTroop = R.drawable.wizard;
                break;
            case 8:
                firstTroop = R.drawable.healer;
                break;
            case 9:
                firstTroop = R.drawable.dragon;
                break;
        }
        return firstTroop;
    }

    public String getFirstTroopText(int number){
        switch(number){
            case 1:
                firstTroopText = "Lvl 1 & 2";
                break;
            case 2:
                firstTroopText = "Lvl 1 & 2";
                break;
            case 3:
                firstTroopText = "Lvl 1 & 2";
                break;
            case 4:
                firstTroopText = "Lvl 1 & 2";
                break;
            case 5:
                firstTroopText = "Lvl 1 & 2";
                break;
            case 6:
                firstTroopText = "Lvl 1 & 2";
                break;
            case 7:
                firstTroopText = "Lvl 1 & 2";
                break;
            case 8:
                firstTroopText = "Lvl 1 & 2";
                break;
            case 9:
                firstTroopText = "Level 1";
                break;
        }
        return firstTroopText;
    }

    public int getSecondTroop(int number){
        switch(number){
            case 1:
                secondTroop = R.drawable.barb2;
                break;
            case 2:
                secondTroop = R.drawable.archer2;
                break;
            case 3:
                secondTroop = R.drawable.goblin2;
                break;
            case 4:
                secondTroop = R.drawable.giant2;
                break;
            case 5:
                secondTroop = R.drawable.wb2;
                break;
            case 6:
                secondTroop = R.drawable.balloon2;
                break;
            case 7:
                secondTroop = R.drawable.wizard2;
                break;
            case 8:
                secondTroop = R.drawable.healer2;
                break;
            case 9:
                secondTroop = R.drawable.dragon2;
                break;
        }
        return secondTroop;
    }

    public String getSecondTroopText(int number){
        switch(number){
            case 1:
                secondTroopText = "Lvl 3 & 4";
                break;
            case 2:
                secondTroopText = "Lvl 3 & 4";
                break;
            case 3:
                secondTroopText = "Lvl 3 & 4";
                break;
            case 4:
                secondTroopText = "Lvl 3 & 4";
                break;
            case 5:
                secondTroopText = "Lvl 3 & 4";
                break;
            case 6:
                secondTroopText = "Lvl 3 & 4";
                break;
            case 7:
                secondTroopText = "Level 3";
                break;
            case 8:
                secondTroopText = "Lvl 3 & 4";
                break;
            case 9:
                secondTroopText = "Level 2";
                break;
        }
        return secondTroopText;
    }

    public int getThirdTroop(int number){
        switch(number){
            case 1:
                thirdTroop = R.drawable.barb3;
                break;
            case 2:
                thirdTroop = R.drawable.archer3;
                break;
            case 3:
                thirdTroop = R.drawable.goblin3;
                break;
            case 4:
                thirdTroop = R.drawable.giant3;
                break;
            case 5:
                thirdTroop = R.drawable.wb3;
                break;
            case 6:
                thirdTroop = R.drawable.balloon3;
                break;
            case 7:
                thirdTroop = R.drawable.wizard3;
                break;
            // No 8
            case 9:
                thirdTroop = R.drawable.dragon3;
                break;
        }
        return thirdTroop;
    }

    public String getThirdTroopText(int number){
        switch(number){
            case 1:
                thirdTroopText = "Level 5";
                break;
            case 2:
                thirdTroopText = "Level 5";
                break;
            case 3:
                thirdTroopText = "Level 5";
                break;
            case 4:
                thirdTroopText = "Level 5";
                break;
            case 5:
                thirdTroopText = "Level 5";
                break;
            case 6:
                thirdTroopText = "Level 5";
                break;
            case 7:
                thirdTroopText = "Level 4";
                break;
            // no 8
            case 9:
                thirdTroopText = "Level 3";
                break;
        }
        return thirdTroopText;
    }

    public int getFourthTroop(int number){
        switch(number){
            case 1:
                fourthTroop = R.drawable.barb4;
                break;
            case 2:
                fourthTroop = R.drawable.archer4;
                break;
            case 3:
                fourthTroop = R.drawable.goblin4;
                break;
            case 4:
                fourthTroop = R.drawable.giant4;
                break;
            case 5:
                fourthTroop = R.drawable.wb4;
                break;
            case 6:
                fourthTroop = R.drawable.balloon4;
                break;
            case 7:
                fourthTroop = R.drawable.wizard4;
                break;
            //No 8
            case 9:
                fourthTroop = R.drawable.dragon4;
                break;
        }
        return fourthTroop;
    }

    public String getFourthTroopText(int number){
        switch(number){
            case 1:
                fourthTroopText = "Level 6";
                break;
            case 2:
                fourthTroopText = "Level 6";
                break;
            case 3:
                fourthTroopText = "Level 6";
                break;
            case 4:
                fourthTroopText = "Level 6";
                break;
            case 5:
                fourthTroopText = "Level 6";
                break;
            case 6:
                fourthTroopText = "Level 6";
                break;
            case 7:
                fourthTroopText = "Level 5";
                break;
            // no 8
            case 9:
                fourthTroopText = "Level 4";
                break;
        }
        return fourthTroopText;
    }

    public int getFifthTroop(int number){
        switch(number){
            //#1-6 no fifth troop
            case 7:
                fifthTroop = R.drawable.wizard5;
                break;
            //no 8
            //no 9
        }
        return fifthTroop;
    }

    public String getFifthTroopText(int number){
        switch(number){
            //#1-6 no fifth troop
            case 7:
                fifthTroopText = "Level 6";
                break;
            // no 8
            // no 9
        }
        return fifthTroopText;
    }

    public int getDescription(int number){
        switch (number){
            case 1:
                description = R.drawable.barb_description;
                break;
            case 2:
                description = R.drawable.arch_description;
                break;
            case 3:
                description = R.drawable.gob_description;
                break;
            case 4:
                description = R.drawable.giant_description;
                break;
            case 5:
                description = R.drawable.wb_description;
                break;
            case 6:
                description = R.drawable.balloon_description;
                break;
            case 7:
                description = R.drawable.wizard_description;
                break;
            case 8:
                description = R.drawable.healer_description;
                break;
            case 9:
                description = R.drawable.dragon_description;
                break;
        }
        return description;
    }

    public int getTroop_costs(int number){
        switch (number){
            case 1:
                troop_costs = R.drawable.barb_costs;
                break;
            case 2:
                troop_costs = R.drawable.arch_costs;
                break;
            case 3:
                troop_costs = R.drawable.gob_costs;
                break;
            case 4:
                troop_costs = R.drawable.giant_costs;
                break;
            case 5:
                troop_costs = R.drawable.wb_costs;
                break;
            case 6:
                troop_costs = R.drawable.balloon_costs;
                break;
            case 7:
                troop_costs = R.drawable.wizard_costs;
                break;
            case 8:
                troop_costs = R.drawable.healer_costs;
                break;
            case 9:
                troop_costs = R.drawable.dragon_costs;
        }
        return troop_costs;
    }

    public int getTroop_stats(int number){
        switch(number){
            case 1:
                troop_stats = R.drawable.barb_stats;
                break;
            case 2:
                troop_stats = R.drawable.arch_stats;
                break;
            case 3:
                troop_stats = R.drawable.gob_stats;
                break;
            case 4:
                troop_stats = R.drawable.giant_stats;
                break;
            case 5:
                troop_stats = R.drawable.wb_stats;
                break;
            case 6:
                troop_stats = R.drawable.balloon_stats;
                break;
            case 7:
                troop_stats = R.drawable.wizard_stats;
                break;
            case 8:
                troop_stats = R.drawable.healer_stats;
                break;
            case 9:
                troop_stats = R.drawable.dragon_stats;
                break;
        }
        return troop_stats;
    }

    public int getTroop_stats2(int number){
        switch(number){
            case 1:
                troop_stats2 = R.drawable.barb_stats2;
                break;
            case 2:
                troop_stats2 = R.drawable.arch_stats2;
                break;
            // Case 3... No Goblin
            // Case 4... No Giant
            case 5:
                troop_stats2 = R.drawable.wb_stats2;
                break;
            case 6:
                troop_stats2 = R.drawable.balloon_stats2;
                break;
            //Case 7... No Wizard
            //No 8 or 9
        }
        return troop_stats2;
    }

    public void restoreActionBar() {

        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setTitle(mTitle);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        if (!mNavigationDrawerFragment.isDrawerOpen()) {
            // Only show items in the action bar relevant to this screen
            // if the drawer is not showing. Otherwise, let the drawer
            // decide what to show in the action bar.
            getMenuInflater().inflate(R.menu.troop_screen, menu);
            restoreActionBar();
            return true;
        }
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        return id == R.id.action_settings || super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";
        private troopScreen troopScreen = new troopScreen();

        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_troop_screen, container, false);
            assert rootView != null;

            //First Troop
            ImageView imageView = (ImageView) rootView.findViewById(R.id.t_first_troop);
            imageView.setImageResource(troopScreen.getFirstTroop(getArguments().getInt(ARG_SECTION_NUMBER)));

            //First Troop Text
            TextView textView = (TextView) rootView.findViewById(R.id.t_first_troop_text);
            textView.setText(troopScreen.getFirstTroopText(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Second Troop
            ImageView imageView1 = (ImageView) rootView.findViewById(R.id.t_second_troop);
            imageView1.setImageResource(troopScreen.getSecondTroop(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Second Troop Text
            TextView textView1 = (TextView) rootView.findViewById(R.id.t_second_troop_text);
            textView1.setText(troopScreen.getSecondTroopText(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Third Troop
            ImageView imageView2 = (ImageView) rootView.findViewById(R.id.t_third_troop);
            imageView2.setImageResource(troopScreen.getThirdTroop(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Third Troop Text
            TextView textView2 = (TextView) rootView.findViewById(R.id.t_third_troop_text);
            textView2.setText(troopScreen.getThirdTroopText(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Fourth Troop
            ImageView imageView3 = (ImageView) rootView.findViewById(R.id.t_fourth_troop);
            imageView3.setImageResource(troopScreen.getFourthTroop(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Fourth Troop Text
            TextView textView3 = (TextView) rootView.findViewById(R.id.t_fourth_troop_text);
            textView3.setText(troopScreen.getFourthTroopText(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Troop Description
            ImageView imageView4 = (ImageView) rootView.findViewById(R.id.t_description);
            imageView4.setImageResource(troopScreen.getDescription(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Troop Costs
            ImageView imageView5 = (ImageView) rootView.findViewById(R.id.t_stats);
            imageView5.setImageResource(troopScreen.getTroop_costs(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Troop Stats
            ImageView imageView6 = (ImageView) rootView.findViewById(R.id.t_second_stats);
            imageView6.setImageResource(troopScreen.getTroop_stats(getArguments().getInt(ARG_SECTION_NUMBER)));

            //More Troop Stats
            ImageView imageView7 = (ImageView) rootView.findViewById(R.id.t_third_stats);
            imageView7.setImageResource(troopScreen.getTroop_stats2(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Fifth Troop
            ImageView imageView8 = (ImageView) rootView.findViewById(R.id.t_fifth_troop);
            imageView8.setImageResource(troopScreen.getFifthTroop(getArguments().getInt(ARG_SECTION_NUMBER)));

            //Fifth Troop Text
            TextView textView4 = (TextView) rootView.findViewById(R.id.t_fifth_troop_text);
            textView4.setText(troopScreen.getFifthTroopText(getArguments().getInt(ARG_SECTION_NUMBER)));

            return rootView;
        }

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            ((troopScreen) activity).onSectionAttached(
                    getArguments().getInt(ARG_SECTION_NUMBER));
        }
    }
}

什么可能导致这种情况?

使用
-Xmx
命令行选项运行


像这样设置VM参数
-Xmx1024M

OutOfMemory解码位图附近通常是由于将大量图像加载到内存中。请记住:如果将位图加载到mem中,它的id会减少压缩并消耗分辨率x colorDepth字节,这对于高密度屏幕上的大图像来说可能是非常大的


此外,如果您总是重新加载图像,但有一个隐藏的内存泄漏,您可能会遇到问题。在处理大量图像时,您应该尝试缓存和重用它们。尝试遵循本教程中介绍的最佳实践。

从这行代码开始(并删除它):

为了访问troopScreen类中的实用程序方法,您似乎需要使用它(应该重命名为troopScreen以遵循标准Java命名约定,在本文的其余部分中,我将引用它)

我建议您使用这些方法<代码>静态< /代码>,并通过调用如“代码> ToopPluts.GETFIDSTROPUP())/代码>等调用它们(或考虑将它们移到您的片段,或可能的外部类)。 看起来您可能有一个循环引用,因为您的片段中实际上有一个活动实例(TroopScreen)。我不是碎片管理专家,但我无法想象如果你的碎片需要销毁,这不会导致某种问题

我怀疑是你的内存泄漏


祝你好运。

正如公认的答案所示,它看起来像是导致内存泄漏的循环引用


对于任何遇到类似错误的人。这将为您提供工具,以找出任何无法在SO上解决的内存泄漏的根源。

Hmm位图和OutOfMemory是我以前从未见过的东西它也会在设备上崩溃吗?我没有设备,所以我无法测试您使用的IDE是什么?您能从troopScreen.java发布源代码吗?回答很好,我认为你的循环引用是正确的@icykum删除循环引用修复了它吗?
   private troopScreen troopScreen = new troopScreen();