日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

android-studio - android webview 內(nèi)存泄漏

瀏覽:158日期:2024-03-01 16:09:05

問題描述

每次啟動這個activity memory allocated 逐漸增加,且不會被回收求解決方案,下面是具體實(shí)現(xiàn)

public class NetWork { private static AuthApi authApi; private static UserApi userApi; private static Converter.Factory gsonConverterFactory= GsonConverterFactory.create(); private static CallAdapter.Factory rxJavaCallAdapterFactory= RxJavaCallAdapterFactory.create(); public static AuthApi getAuthApi(){Log.d('NetWork', 'authApi==null:' + (authApi == null));if(authApi == null){ Retrofit retrofit=new Retrofit.Builder() .baseUrl(UrlConfig.ACCESS_TOKEN) .addCallAdapterFactory(rxJavaCallAdapterFactory) .addConverterFactory(gsonConverterFactory) .build(); authApi=retrofit.create(AuthApi.class);}return authApi; } public static UserApi getUserApi(){Log.d('NetWork', 'userApi==null:' + (userApi == null));if(userApi == null){ Retrofit retrofit=new Retrofit.Builder() .baseUrl(UrlConfig.BASE_URL) .addCallAdapterFactory(rxJavaCallAdapterFactory) .addConverterFactory(gsonConverterFactory) .build(); userApi=retrofit.create(UserApi.class);}return userApi; }}

public class OAuthLoginActivity extends AppCompatActivity { private WebViewProgress mWebView; Subscription mSubscription; Subscription mProgressSubscription; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_oauth);initView();/** 1.getCode client_id scope* 2.getToken client_id client_secret code* */mWebView.loadUrl(UrlConfig.LOGIN_URL);Log.d('webViewURL',mWebView.getUrl()); } @Override protected void onDestroy() {super.onDestroy();mWebView.removeAllViews();mWebView.destroy();if(mSubscription!=null){ mSubscription.unsubscribe();}if(mProgressSubscription!=null){ mProgressSubscription.unsubscribe();} } @Override public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()){ case android.R.id.home:finish();return true;}return super.onOptionsItemSelected(item); } class MyWebViewClient extends WebViewClient{@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); Log.d('MyWebViewClient', url); if(url.contains('?code=')){Uri uri=Uri.parse(url);String code=uri.getQueryParameter('code');getUser(code); }}@Overridepublic void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); mProgressSubscription=Observable.timer(1, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Long>() {@Overridepublic void call(Long aLong) { mWebView.mProgressBar.setVisibility(View.GONE);} });} } private void initView(){Toolbar toolbar=(Toolbar) findViewById(R.id.toolbar);mWebView=(WebViewProgress) findViewById(R.id.web_view);toolbar.setTitle('授權(quán)登錄');setSupportActionBar(toolbar);getSupportActionBar().setDisplayHomeAsUpEnabled(true);WebSettings webSettings=mWebView.getSettings();webSettings.setJavaScriptEnabled(true);webSettings.setSupportZoom(true);webSettings.setBuiltInZoomControls(true);webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);mWebView.requestFocusFromTouch();mWebView.setWebViewClient(new MyWebViewClient()); } private void getUser(String code){mSubscription=NetWork.getAuthApi().getAccessToken(UrlConfig.CLIENT_ID,UrlConfig.CLIENT_SECRET,code).flatMap(new Func1<AccessToken, Observable<User>>() { @Override public Observable<User> call(AccessToken accessToken) {return NetWork.getUserApi().getUser(accessToken.getAccess_token()); }}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<User>() { @Override public void onCompleted() {Log.d('OAuthLoginActivity', 'completed'); } @Override public void onError(Throwable e) {Log.d('OAuthLoginActivity', 'e:' + e); } @Override public void onNext(User user) {Log.d('OK',user.getLogin());Toast.makeText(OAuthLoginActivity.this, user.getLogin(), Toast.LENGTH_SHORT).show(); }}); }}

問題解答

回答1:

補(bǔ)充:感謝@DOS提醒,增加LayoutParams布局參數(shù)設(shè)置。

你可以試試我的方法:

不要在布局文件中聲明<WebView>,改成在Activity中創(chuàng)建 如,WebView mWebView = new WebView(this);

在布局文件中用容器類布局,比如FrameLayout作為WebView的容器,在Activity中主動把WebView添加到容器中。

在OnDestory()中移除、銷毀WebView。

舉個例子吧:我們用FrameLayout作為WebView的父容器

1: 使用容器包裹WebView

<FrameLayout android: android:layout_width='fill_parent' android:layout_height='wrap_content'/>

2:在Activity中創(chuàng)建WebView,在OnDestroy()方法中從容器中移除、銷毀WebView

public class MyActivity extends Activity { private FrameLayout mContainer; private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); ... mContainer = (FrameLayout) findViewById(R.id.container);mWebView = new WebView(this);ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);mWebView.setLayoutParams(p);mContainer.addView(mWebView); } @Override protected void onDestroy() {super.onDestroy();mContainer.removeAllViews();mWebView.destroy(); }}

之所以這么做的原因是在XML文件中創(chuàng)建WebView,會把Activity作為Context傳給WebView,而不是Application Context。所以在finishingActivity的時候,WebView任然持有Activity引用,導(dǎo)致Activity無法被回收。更多詳情,戳這里

回答2:

樓主可以使用MAT分析一下,具體是哪個對象在持有Activity對象,然后在就可以定位到問題了。

回答3:

再加個:獨(dú)立進(jìn)程

標(biāo)簽: web
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产福利资源一区| 国产情侣久久| 久久99久久人婷婷精品综合| 国产精品夜夜夜| 久久不见久久见免费视频7| 精品日韩视频| 国产欧美另类| 精品精品99| 久久五月天小说| 亚洲深夜影院| 国产亚洲高清在线观看| 69堂精品视频在线播放| 久久伊人亚洲| 91tv亚洲精品香蕉国产一区| 女同性一区二区三区人了人一| 亚洲一区激情| 日本aⅴ精品一区二区三区 | 麻豆久久久久久| 四季av一区二区凹凸精品| av一区在线| 午夜电影一区| 四虎国产精品免费观看| 亚洲作爱视频| 国产精品红桃| 色爱综合网欧美| 免费不卡在线视频| 精品亚洲自拍| 久热精品在线| 精品国产三区在线| 免费精品视频| 精品久久福利| 一本一道久久a久久| 精品午夜视频| 久久成人一区| 欧美丰满日韩| 少妇精品久久久一区二区| 四季av一区二区凹凸精品| 亚洲人亚洲人色久| 国产成人久久精品麻豆二区| 精品亚洲精品| 狠狠干成人综合网| 欧美激情综合| 鲁大师成人一区二区三区| 麻豆中文一区二区| 免费一级片91| 日韩电影免费网站| 日本va欧美va精品| 91精品亚洲| 久久黄色影视| 亚洲精品极品少妇16p| 久久av影视| 亚洲免费影视| 成人欧美一区二区三区的电影| 色8久久久久| 色婷婷精品视频| 捆绑调教美女网站视频一区| 久久最新视频| 国产精品av久久久久久麻豆网| 国产精品啊v在线| 亚洲制服欧美另类| 午夜国产精品视频| 日韩av自拍| 国产精品亚洲综合色区韩国| 丝袜亚洲另类欧美| 日韩二区在线观看| 日韩在线视频精品| 久久99精品久久久野外观看| 香蕉久久久久久| 在线午夜精品| 亚洲黄色中文字幕| 牛牛精品成人免费视频| 亚洲97av| 亚洲人成亚洲精品| 亚洲综合不卡| 一级欧洲+日本+国产| 亚洲伦乱视频| 国产成人免费精品| 国内精品美女在线观看| 国产精品美女在线观看直播| 日韩欧美美女在线观看| 亚洲精一区二区三区| 蜜臀久久久99精品久久久久久| 亚洲免费成人| 亚洲专区欧美专区| 亚洲五月婷婷| 午夜欧美巨大性欧美巨大| 国产美女高潮在线| 都市激情国产精品| 日本蜜桃在线观看视频| 日韩久久一区二区三区| 久久久久国产精品一区二区| 久久久久国产| 亚洲大全视频| 欧美69视频| 亚洲男女自偷自拍| 日韩制服丝袜av| 亚洲综合小说| 青青草国产精品亚洲专区无| 69堂免费精品视频在线播放| 欧美一级二区| 国产精品成人国产| 国精品产品一区| 国产一区二区精品久| 亚洲欧美久久| 日韩一区欧美二区| 一区二区精品| 欧美日韩午夜| 精品三级久久久| 日韩欧美午夜| 一区二区三区视频免费观看| 久久中文字幕二区| 欧洲激情综合| 亚洲丝袜美腿一区| 国产日韩一区二区三区在线播放| 综合国产在线| 日本欧美在线| 国产成人免费精品| 激情婷婷欧美| 日韩欧美中文字幕电影| 国产精品17p| 欧美日韩尤物久久| 亚洲在线观看| 国产精品极品在线观看| 日韩欧美网址| 久久aⅴ国产紧身牛仔裤| 国产欧美视频在线| 日韩国产一区| 视频在线观看一区| 久久99精品久久久久久园产越南| 国产一区国产二区国产三区| 久久精品91| 亚洲乱亚洲高清| 日韩成人免费| 亚洲精选成人| 欧美香蕉视频| 日本不卡不码高清免费观看| 精品国产99| 鲁大师成人一区二区三区| 久久的色偷偷| 一本色道久久精品| 国内在线观看一区二区三区| 99视频在线精品国自产拍免费观看| 国产探花在线精品| 国产精品7m凸凹视频分类| 91精品啪在线观看国产爱臀| 中文字幕在线视频网站| 蜜桃91丨九色丨蝌蚪91桃色| 国产成人在线中文字幕| 一区二区不卡| 丝袜美腿诱惑一区二区三区| 欧美日韩va| 日韩视频一区二区三区在线播放免费观看| 国产欧美日韩在线观看视频 | 欧美国产视频| 美女国产一区| 久久久男人天堂| 日韩1区2区3区| 日韩国产网站| 国产精品天天看天天狠| 国产精品日韩欧美一区| 91欧美在线| 日韩 欧美一区二区三区| 欧美综合另类| 色一区二区三区四区| 日本午夜免费一区二区| 亚洲国产成人精品女人| 国产99在线| 久久久91麻豆精品国产一区| 蜜桃久久av一区| 999国产精品永久免费视频app| 国产精品色婷婷在线观看| 亚洲少妇在线| 99国产精品一区二区| 麻豆国产一区| 国产日产一区| 综合视频一区| 一本色道精品久久一区二区三区| 色综合五月天| 国产欧美另类| 日韩综合一区二区| 亚洲一区二区三区高清不卡| 久久人人88| 成人久久一区| av中文字幕在线观看第一页| 久久成人av| 欧美aa在线视频| 国产欧美在线观看免费| 欧美在线黄色| 综合亚洲视频| 尹人成人综合网| 丁香六月综合| 韩国女主播一区二区三区| 亚洲ab电影| 蜜芽一区二区三区| 国产美女一区| 9色国产精品| 日韩一区二区免费看| 久久亚洲国产| 国产真实久久| 亚洲一级影院|