10

minSdkVersion="14" と targetSdkVersion="17" で新しいアプリを開始しています。6 ページのビューページャーが含まれています。3 つの webviews と 3 つのその他のビューがあります。

戻るボタンまたはホーム ボタンをクリックしてアプリをバックグラウンドにプッシュすると、「キャッシュされたバックグラウンド プロセス」で約 40MB が使用されますが、その理由がわかりません。

これは私の webview の例です:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.RelativeLayout;

public class Presentation extends Fragment {
    boolean isOption = false;
    RelativeLayout main = null;
    WebView web_main = null;

    public Presentation () {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        main = (RelativeLayout) inflater.inflate(R.layout.webview,  container, false);
        return main;

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        web_main = new WebView(getActivity().getApplicationContext());
        web_main.setWebViewClient(new WebViewClient());
        web_main.getSettings().setAppCacheEnabled(false);
        web_main.loadUrl("file:///android_asset/main.html");
        main.removeAllViews();
        main.addView(web_main);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(getClass().getName(), "[OnDestroy]");
        main.removeAllViews();
        web_main.destroy();
        main = null;
        web_main = null;
        System.gc();
    }

}

いくつかのチュートリアルと回答に従いましたが、キャッシュされたバックグラウンド プロセスには影響しません。これが私の主なアクティビティです。

public class AppTest extends FragmentActivity {

/**
 * The {@link android.support.v4.view.PagerAdapter} that will provide
 * fragments for each of the sections. We use a
 * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
 * will keep every loaded fragment in memory. If this becomes too memory
 * intensive, it may be best to switch to a
 * {@link android.support.v4.app.FragmentStatePagerAdapter}.
 */
SectionsPagerAdapter mSectionsPagerAdapter;

/**
 * The {@link ViewPager} that will host the section contents.
 */
ViewPager mViewPager;

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

    // Create the adapter that will return a fragment for each of the three
    // primary sections of the app.
    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

}

@Override
protected void onStop() {
    super.onStop();
    System.gc();
    Log.i(getClass().getName(), "[OnStop]");
    android.os.Debug.stopMethodTracing();

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main_content, menu);
    return true;
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mViewPager.removeAllViews();
    Log.i(getClass().getName(), "[OnDestroy]");
}

/**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the sections/tabs/pages.
 */
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a DummySectionFragment (defined as a static inner class
        // below) with the page number as its lone argument.
        Fragment fragment = null;

        switch (position) {
        case 0:
            fragment = new Presentation();
            break;
              /*    case 1:
            fragment = new Edition();
            break;
        case 2:
            fragment = new Programme();
            break;
        case 3:
            fragment = new Twitter();
            break;
        case 4:
            fragment = new Partenaire();
            break;
        case 5:
            fragment = new Information();
            break;*/
        default:
            fragment = new Presentation();
            break;
        }


        return fragment;
    }

    @Override
    public int getCount() {
        // Show 6 total pages.
        return 6;
    }

    @Override
    public CharSequence getPageTitle(int position) {

        switch (position) {
        case 0:
            return "Presentation";
        case 1:
            return "Edition";
        case 2:
            return "Program";
        case 3:
            return "Tweets";
        case 4:
            return "Partners";
        case 5:
            return "Information";
        }
        return null;
    }
}
}

誰が何が間違っているか見ることができますか?

編集 webview をレイアウトに入れようとしましたが、それでも同じです 実際、アプリがバックグラウンド状態のときに何がキャッシュに入れられるか知りたいですか?

4

1 に答える 1