انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Destroy شدن خود به خود اکتیویتی شامل WebView (برنامه نویسی اندروید)

Destroy شدن خود به خود اکتیویتی شامل WebView (برنامه نویسی اندروید)

#3
خب دوستان گلم 
طبق گفته داش مهدی مشکل از 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 contextAttributeSet attrs) {
 
       super(context.getApplicationContext(), attrs);
 
       setWebViewClient(new MyWebViewClient((Activity)context));
 
   }

 
   public NonLeakingWebView(Context contextAttributeSet attrsint defStyle) {
 
       super(context.getApplicationContext(), attrsdefStyle);
 
       setWebViewClient(new MyWebViewClient((Activity)context));
 
   }

 
   @Override
    public void destroy
() {
 
       super.destroy();

 
       try {
 
           ifsConfigCallback!=null )
 
               sConfigCallback.set(nullnull);
 
       } catch (Exception e) {
 
           throw new RuntimeException(e);
 
       }
 
   }


 
   protected static class MyWebViewClient extends WebViewClient {
 
       protected WeakReference<ActivityactivityRef;

 
       public MyWebViewClientActivity activity ) {
 
           this.activityRef = new WeakReference<Activity>(activity);
 
       }

 
       @Override
        public boolean shouldOverrideUrlLoading
(WebView viewString url) {
 
           try {
 
               final Activity activity activityRef.get();
 
               ifactivity!=null )
 
                   activity.startActivity(new Intent(Intent.ACTION_VIEWUri.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 رو هک کردم.


یاعلی... Flower Flower
پاسخ
 سپاس شده توسط mahdi10539 ، admin ، zanyyy


پیام‌های این موضوع
RE: Destroy شدن خود به خود اکتیویتی - توسط mahdi10539 - ۱۳۹۴/۱۱/۰۲, ۰۵:۰۰ ب.ظ
RE: Destroy شدن خود به خود اکتیویتی - توسط sinabelle - ۱۳۹۴/۱۱/۰۲, ۰۵:۴۵ ب.ظ

پرش به انجمن:


کاربران در حال بازدید این موضوع: 2 مهمان