Tôi đang bắt đầu một ứng dụng mới với minSdkVersion = "14" và targetSdkVersion = "17". Nó chứa một viewpager với 6 trang. Có 3 lượt xem web và 3 chế độ xem khác.Android - Tại sao ứng dụng của tôi sử dụng khoảng 40MB quy trình nền được lưu trong bộ nhớ cache?
Khi tôi đẩy ứng dụng của mình lên nền bằng cách nhấp vào nút quay lại hoặc nút trang chủ, nó sử dụng khoảng 40MB trong "quy trình nền được lưu trong bộ nhớ cache" và tôi không hiểu tại sao.
Đây là một ví dụ về một trong webview của tôi:
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();
}
}
Tôi đi theo nhiều hướng dẫn và câu trả lời nhưng không có ảnh hưởng đến quá trình nền cache Đây là hoạt động chính của tôi:
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;
}
}
}
Bất cứ ai có thể nhìn thấy những gì là sai?
EDIT Tôi cố gắng để đưa webview trong cách bố trí nhưng nó vẫn như nhau Trong thực tế, tôi muốn biết những gì được đặt trong bộ nhớ cache khi ứng dụng ở trạng thái nền?
Không có ý tưởng nếu nó có liên quan, nhưng trong mảnh trình bày của bạn, bạn có: onCreateView nhưng bên trong bạn gọi super.onCreate() vs super.onCreateView. Điều đó có vẻ hơi lạ với tôi. Đối với phần còn lại, không có ý tưởng atm – Entreco
Tôi thay thế super.onCreate() bằng super.onCreateView() nhưng nó vẫn giống nhau – TraeX