1

I am creating a basic application with navigation drawer and fragments.I am initializing all the fragments at once and hide them at start and according to user click I am showing required fragments.It runs perfectly but it generates message Skipped 81 frames! The application may be doing too much work on its main thread..I have read about it,that we should use sepreate thread for performing long running operations.But in my application i am not doing such thing and still it generates this message.

This is my code:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        mContext = HomeActivity.this;
        HomeMenuButtonLayout = (LinearLayout) findViewById(R.id.HomeMenuButtonLayout);
        HomeMenuButtonLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDrawerLayout.openDrawer(GravityCompat.START);
            }
        });
        // load slide menu items

        navMenuTitles = getResources().getStringArray(R.array.nav_drawer_item);
        navMenuIcons = getResources().obtainTypedArray(R.array.nav_drawer_item_icon);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

        navDrawerItems = new ArrayList<NavDrawerItem>();

        // adding nav drawer items to array
        for (int i = 0; i < navMenuTitles.length; i++) {
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[i], navMenuIcons.getResourceId(i, -1)));
        }

        // Set Header Right Drawer
        LayoutInflater inflaters = getLayoutInflater();
        ViewGroup headertop = (ViewGroup) inflaters.inflate(R.layout.list_home_header, mDrawerList,
                false);
        mDrawerList.addHeaderView(headertop, null, false);

        // setting the nav drawer list adapter
        adapter = new NavDrawerListAdapter(getApplicationContext(),
                navDrawerItems, "yes");
        mDrawerList.setAdapter(adapter);

        setLastFragmentTag("HOME");
        setTitleText("Home");

        Fragment Fragment1 = new HomeFragment();
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.frame_container, Fragment1, getLastFragmentTag());
        transaction.commit();

        Fragment Fragment2 = new FriendListFragment();
        FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.frame_container, Fragment2, "Friends");
        transaction.hide(Fragment2);
        transaction1.commit();

        Fragment Fragment3 = new ChatFragment();
        FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.frame_container, Fragment3, "Chat");
        transaction.hide(Fragment3);
        transaction2.commit();

        Fragment Fragment4 = new SettingsFragment();
        FragmentTransaction transaction3 = getSupportFragmentManager().beginTransaction();
        transaction3.add(R.id.frame_container, Fragment4, "SETTINGS");
        transaction3.hide(Fragment4);
        transaction3.commit();

        Fragment Fragment5 = new Fragment5();
        FragmentTransaction transaction4 = getSupportFragmentManager().beginTransaction();
        transaction4.add(R.id.frame_container, Fragment5, "PURCHASE");
        transaction4.hide(Fragment5);
        transaction4.commit();

        Fragment Fragment6 = new PurchasedHistoryFragment();
        FragmentTransaction transaction5 = getSupportFragmentManager().beginTransaction();
        transaction5.add(R.id.frame_container, Fragment6, "SALES");
        transaction5.hide(Fragment6);
        transaction5.commit();

        Fragment Fragment7 = new NewsAndOffersFragment();
        FragmentTransaction transaction6 = getSupportFragmentManager().beginTransaction();
        transaction6.add(R.id.frame_container, Fragment7, "OFFER");
        transaction6.hide(Fragment7);
        transaction6.commit();

        mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
                if (position == 1) {
                    openFragment("HOME");
                    setTitleText("Home");
                }

                if (position == 3) {
                    openFragment("Friends");
                    setTitleText("Friends");
                }

                if (position == 6) {
                    //openFragment(new NewsAndOffersFragment());
                    openFragment("Chat");
                    setTitleText("Chat");
                }

                if (position == 2) {
                    // openFragment(new ChatFragment());
                    openFragment("SETTINGS");
                    setTitleText("SETTINGS");
                }

                if (position == 8) {
                    openFragment("SETTINGS");
                    setTitleText("Settings");
                }

                if (position == 4) {
                    //openFragment(new Fragment5());
                    openFragment("PURCHASE");
                    setTitleText("PURCHASE");
                }

                if (position == 5) {
                    // openFragment(new PurchasedHistoryFragment());
                    openFragment("SALES");
                    setTitleText("SALES");
                }
            }
        });


            public void openFragment(final String currentTag) {
        // TODO Auto-generated method stub
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

                if (currentTag == getLastFragmentTag()) {
                    mDrawerLayout.closeDrawers();
                } else {
                    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                    transaction.show(getSupportFragmentManager().findFragmentByTag(currentTag));
                    transaction.hide(getSupportFragmentManager().findFragmentByTag(getLastFragmentTag()));
                    transaction.commit();
                }
                setLastFragmentTag(currentTag);
            }
        }, 300);
        mDrawerLayout.closeDrawers();
    }
}

so my question is,how to put and what part of code should i put on seperate thread.I am not using any api till now.

AbhayBohra
  • 2,047
  • 24
  • 36
  • Until your app is working smooth there is no issue with this warning – Alok Gupta Apr 02 '16 at 07:02
  • Kindly check answer in this link http://stackoverflow.com/questions/14678593/the-application-may-be-doing-too-much-work-on-its-main-thread – Panneer Selvam R Apr 02 '16 at 07:08
  • 1
    There's nothing in your code that needs to be done on a worked thread, however keeping this many Fragments in memory with just one of them being visible doesn't seem like a good idea. Try to rethink your approach. – Egor Apr 02 '16 at 07:16
  • @Egor i know this approach is not good but i wanted to use the same object of the fragments every time,In my previous code i was creating new object every time when user click on drawer menu items – AbhayBohra Apr 02 '16 at 07:22

0 Answers0