خب دوستان گلم
طبق گفته داش مهدی مشکل از webkit بود.
حالا میگم چطوری درستش کردم شاید بقیه دوستان هم این مشکل براشون پیش بیاد!!
خب قیبلش یه کلاس جدا به نام NonLeakingWebView درست کنید و کدهای زیرو درش قرار بدید:
بعد برای استفاده کافیه در لایه xml کدهای WebView رو اینجوری بنویسید:
تموم شد رفت...
ولی خوب این یکی از باگ های اندرویده و ممکنه باهم مشکلاتی باشه ولی بنده با این روش مشکلو رفع کردم و به اصطلاح Android WebView Memory Leak رو هک کردم.
یاعلی...
طبق گفته داش مهدی مشکل از webkit بود.
حالا میگم چطوری درستش کردم شاید بقیه دوستان هم این مشکل براشون پیش بیاد!!
خب قیبلش یه کلاس جدا به نام NonLeakingWebView درست کنید و کدهای زیرو درش قرار بدید:
کد پیاچپی:
package com.webkit.kelidestan;
import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.AttributeSet;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class NonLeakingWebView extends WebView {
private static Field sConfigCallback;
static {
try {
sConfigCallback = Class.forName("android.webkit.BrowserFrame").getDeclaredField("sConfigCallback");
sConfigCallback.setAccessible(true);
} catch (Exception e) {
// ignored
}
}
public NonLeakingWebView(Context context) {
super(context.getApplicationContext());
setWebViewClient( new MyWebViewClient((Activity)context) );
}
public NonLeakingWebView(Context context, AttributeSet attrs) {
super(context.getApplicationContext(), attrs);
setWebViewClient(new MyWebViewClient((Activity)context));
}
public NonLeakingWebView(Context context, AttributeSet attrs, int defStyle) {
super(context.getApplicationContext(), attrs, defStyle);
setWebViewClient(new MyWebViewClient((Activity)context));
}
@Override
public void destroy() {
super.destroy();
try {
if( sConfigCallback!=null )
sConfigCallback.set(null, null);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
protected static class MyWebViewClient extends WebViewClient {
protected WeakReference<Activity> activityRef;
public MyWebViewClient( Activity activity ) {
this.activityRef = new WeakReference<Activity>(activity);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try {
final Activity activity = activityRef.get();
if( activity!=null )
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}catch( RuntimeException ignored ) {
// ignore any url parsing exceptions
}
return true;
}
}
}
بعد برای استفاده کافیه در لایه xml کدهای WebView رو اینجوری بنویسید:
کد:
<com.webkit.kelidestan.NonLeakingWebView
android:id="@+id/forces"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="#47aabd" />
تموم شد رفت...
ولی خوب این یکی از باگ های اندرویده و ممکنه باهم مشکلاتی باشه ولی بنده با این روش مشکلو رفع کردم و به اصطلاح Android WebView Memory Leak رو هک کردم.
یاعلی...