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

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

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

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

問題描述

每次啟動(dòng)這個(gè)activity memory allocated 逐漸增加,且不會(huì)被回收求解決方案,下面是具體實(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中主動(dòng)把WebView添加到容器中。

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

舉個(gè)例子吧:我們用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,會(huì)把Activity作為Context傳給WebView,而不是Application Context。所以在finishingActivity的時(shí)候,WebView任然持有Activity引用,導(dǎo)致Activity無(wú)法被回收。更多詳情,戳這里

回答2:

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

回答3:

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

標(biāo)簽: web
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美激情福利| 亚洲91精品| 麻豆成人av在线| 狠狠躁少妇一区二区三区| 久久精品电影| 黑丝一区二区| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩av二区在线播放| 欧美午夜网站| 日韩精品首页| 免费观看在线综合色| 一区在线观看| 国产婷婷精品| 亚洲深夜福利在线观看| 亚洲精品在线二区| 欧美午夜三级| 美女久久精品| 国产videos久久| 久久亚洲精精品中文字幕| 国产精品视频3p| 欧美激情另类| 国产高清一区| 999国产精品永久免费视频app| 久久久久国产| 性欧美69xoxoxoxo| 亚洲日本免费电影| 国产欧美高清| 韩国久久久久久| 伊人久久大香线蕉av不卡| 国产精品呻吟| 国产美女亚洲精品7777| 国产精品13p| 亚洲特色特黄| 日韩黄色大片| 欧美精品不卡| 蜜桃视频一区二区三区在线观看| 悠悠资源网久久精品| 鲁大师影院一区二区三区| 免费观看在线综合色| 日韩大片在线| 精品三级av在线导航| 免费福利视频一区二区三区| 福利欧美精品在线| 国产综合精品| 日韩欧美激情电影| 电影91久久久| 综合激情网站| 亚洲精品**中文毛片| 黄色亚洲大片免费在线观看| 在线精品一区二区| 国产乱码精品一区二区三区亚洲人 | 日产精品一区二区| 丝袜美腿亚洲一区| 亚洲伊人影院| 麻豆mv在线观看| 美女黄网久久| 精品国产不卡一区二区| 亚洲一区亚洲| 美女网站一区| 国产综合色产| 亚洲综合丁香| 久久精品国产999大香线蕉| 成人小电影网站| 欧美天堂视频| 亚洲一区国产一区| 精品香蕉视频| 九一精品国产| 国产精品久久久久久久久久齐齐| 久久精品一区二区三区中文字幕| 欧美a级片一区| 日韩区欧美区| 99久久久久| 日韩在线成人| 久久中文字幕av| 天堂俺去俺来也www久久婷婷| 久久不卡日韩美女| 亚洲国内欧美| 另类亚洲自拍| 亚洲免费毛片| 色爱综合av| 欧美中文日韩| 久久只有精品| 国产一区二区精品| 久久的色偷偷| 欧美特黄一级| 麻豆久久久久久久| 亚洲欧美视频| 久久精品国产网站| 国产成人精品亚洲日本在线观看| 精品久久福利| 久久精品午夜| 成人精品国产亚洲| 亚洲欧美久久久| 日韩av成人高清| 欧洲激情综合| 久久蜜桃av| 久久av资源| 久久精品二区三区| 亚洲影视一区| 国产精品一级在线观看| 成人台湾亚洲精品一区二区| 国产精品国产三级国产在线观看| 日韩精品第一| 中文不卡在线| 日韩精品成人| 国产精品qvod| 日韩一区电影| 日本不卡高清视频| 国产精品xxx在线观看| 欧美成人一二区| 欧美不卡高清一区二区三区| 国产亚洲永久域名| 国产伦理一区| 国产精品超碰| 中文字幕在线高清| 久久久久久久久丰满| 国产精品日本欧美一区二区三区| 日本午夜精品久久久| 国产日韩免费| 精品99在线| 97精品视频在线看| 免费久久久久久久久| 亚洲精品欧美| 高清日韩欧美| 亚洲精品123区| 国产精品扒开腿做爽爽爽软件| 国产精品白浆| 欧美日韩国产免费观看视频| 日韩精品免费观看视频| 精品一区二区三区的国产在线观看 | 精品国产美女a久久9999| 日韩综合精品| 欧美成人综合| 国产精品毛片aⅴ一区二区三区| 久久永久免费| 亚洲午夜久久久久久尤物| 欧美日一区二区三区在线观看国产免| 精品欧美视频| 首页欧美精品中文字幕| 欧美激情麻豆| 激情五月综合| 国产伊人精品| 国产一区二区精品久| 高清日韩欧美| 欧美福利专区| 日韩午夜一区| 国产精品免费看| 亚洲手机视频| 999精品一区| 亚洲一区亚洲| 亚洲69av| 国产精品久久777777毛茸茸| 日韩av一区二区三区四区| 青青草精品视频| 国产精品第一| 一区二区三区网站| 夜夜嗨网站十八久久 | 免费观看日韩电影| 亚洲国产欧美日本视频| 91亚洲自偷观看高清| 国产精品一页| 国产探花一区二区| 91免费精品国偷自产在线在线| 先锋影音久久久| 国产精品美女久久久浪潮软件| 麻豆国产精品777777在线| 婷婷精品视频| 久久久久午夜电影| 三级精品视频| 久久精品国语| 性欧美xxxx免费岛国不卡电影| 欧美色图一区| 日韩在线播放一区二区| 欧美色图国产精品| 蜜桃av一区| 国产日韩一区二区三区在线 | 视频一区日韩精品| 丝袜亚洲另类欧美| 日韩激情网站| 国产精品入口久久| 伊伊综合在线| 尤物网精品视频| 欧美日本一区| 久久中文字幕一区二区| 国产精品99视频| 黄色网一区二区| 久久激情婷婷| 亚洲精品看片| 国产一区二区三区不卡av| 欧美亚洲国产精品久久| 97成人在线| 精品少妇一区| 国产91一区| 97se亚洲| 99精品国产一区二区三区| 亚洲欧洲日韩| 水蜜桃久久夜色精品一区| 9色国产精品| 美女国产一区二区三区| 亚洲欧美视频|