10

Tôi hy vọng sẽ tìm thấy một số trợ giúp ở đây vì tôi không quen thuộc với BroadcastReceivers trong Android. Đoạn mã này mở ra một WebView sẽ chuyển hướng bạn đến trang đăng nhập và nhận mã thông báo đăng nhập khi phát hiện thay đổi URL. Sau đó, Activity đã đóng.Hoạt động đã bị rò rỉ IntentReceiver - LollipopBrowserAccessibilityManager

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    mLoginWebView = (WebView) findViewById(R.id.webview_login); 

    redirectUrl = getString(R.string.app_redirect_url); 


    //RECEIVE PLATFORM ID 
    Bundle bundle = getIntent().getExtras(); 
    if(bundle != null){ 
     platform = bundle.getInt(ConstantsHelper.LOGIN_EXTRA_TOKEN); 
    } 

    mLoginWebView.setWebViewClient(new WebViewClient() { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      Log.d(TAG, "URL change to to " + url + " was detected"); 

      if (url.contains(redirectUrl) || url.contains("passport.twitch.tv")) { 

       Log.d(TAG, "Login with platform " + platform); 

       switch (platform){ 

        //GET INSTAGRAM AUTH TOKEN 
        case ConstantsHelper.ID_INSTAGRAM:{ 
         String accessToken = url.split("=")[1]; 

         SharedPreferenceHelper.putString(ConstantsHelper.PREF_INST_ACCESS_TOKEN, accessToken); 
         NetworkManager.getInstance().catchTokens(); 

        } 

        //GET TWITCH AUTH TOKEN 
        case ConstantsHelper.ID_TWITCH:{ 
         String accessToken = url.substring(url.indexOf("=") + 1, url.indexOf("&")); 

         SharedPreferenceHelper.putString(ConstantsHelper.PREF_TWITCH_ACCESS_TOKEN, accessToken); 
         NetworkManager.getInstance().catchTokens(); 

        } 

       } 
       finish(); //Activity is closed 
       return true; 
      } 
      return false; 
     } 


    }); 

    switch (platform){ 
     case 1: mLoginWebView.loadUrl(NetworkManager.getInstance().getInstagramAuthUrl(getApplicationContext())); 
     case 4: mLoginWebView.loadUrl(NetworkManager.getInstance().getTwitchAuthUrl(getApplicationContext())); 
    } 


} 

Không có gì xảy ra và LogCat đang hiển thị lỗi này:

Activity com.maximutan.socialmedia_feed_merger.activities.LoginActivity has leaked IntentReceiver org.chromium.cont[email protected]25014a that was originally registered here. Are you missing a call to unregisterReceiver()? 
android.app.IntentReceiverLeaked: Activity com.maximutan.socialmedia_feed_merger.activities.LoginActivity has leaked IntentReceiver org.chromium.cont[email protected]25014a that was originally registered here. Are you missing a call to unregisterReceiver()? 
at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:962) 
at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:763) 
at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1179) 
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1159) 
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1153) 
at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:554) 
at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:554) 
at org.chromium.content.browser.accessibility.LollipopBrowserAccessibilityManager.<init>(LollipopBrowserAccessibilityManager.java:3) 
at org.chromium.content.browser.accessibility.BrowserAccessibilityManager.create(BrowserAccessibilityManager.java:2) 
at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method) 

at org.chromium.base.SystemMessageHandler.handleMessage(
SystemMessageHandler.java:7) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5527) 
,at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(
ZygoteInit.java:730) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 

Vấn đề của tôi là tôi không biết đó BroadcastReceiver tôi phải unregister kể từ khi tôi đã không được tạo ra và khởi tạo một.

Nhờ sự giúp đỡ của bạn

+0

Tôi không chắc chắn có gì sai, lỗi đột nhiên đi ra từ Hoạt động mà tôi thiên đường' t điều hướng đến. – neobie

+0

Thiết bị thử nghiệm của bạn có trong Android O không? –

+0

Không có Android 6.0 @Abir Hasan –

Trả lời

1

Sự cố này xảy ra khi destroy() được gọi trên WebView khi WebView vẫn được đính kèm với chế độ xem gốc.

Sự cố có thể được giải quyết bằng cách trước tiên xóa Chế độ xem web khỏi chế độ xem gốc trước khi gọi destroy().

Lưu ý rằng ngay cả khi bạn không gọi destroy() theo cách thủ công (giống như trường hợp của tôi), sự cố này vẫn có thể xảy ra. Tôi thấy rằng điều quan trọng là bạn phải tiêu diệt một cách rõ ràng một WebView (ít nhất là trong một đoạn), vì Android không xử lý điều này cho bạn, và trước khi thực hiện điều đó, bạn phải xóa nó khỏi chế độ xem gốc.

Ví dụ, nếu bạn có một mảnh WebView:

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

     // destroy the WebView completely 
     if (mWebView != null) { 
      // the WebView must be removed from the view hierarchy before calling destroy 
      // to prevent a memory leak 
      // See https://developer.android.com/reference/android/webkit/WebView.html#destroy%28%29 
      ((ViewGroup) mWebView.getParent()).removeView(mWebView); 
      mWebView.removeAllViews(); 
      mWebView.destroy(); 
      mWebView = null; 
     } 
    } 

Full tín dụng cho Billy Brawner: https://brawner.tech/2017/12/03/webview-memory-leak/

-2

Bạn đang sử dụng bất kỳ WebSettings sau đây?

settings.setAllowContentAccess(true); 
    settings.setAllowFileAccessFromFileURLs(true); 
    settings.setAllowUniversalAccessFromFileURLs(true); 
    settings.setAllowFileAccess(true); 

Tôi thấy rằng bằng cách vô hiệu hóa các tùy chọn này, (tôi không thực sự cần chúng trong trường hợp của tôi), lỗi đã biến mất. Tôi đoán nó có một cái gì đó để làm với một thư viện tương thích cần thiết cho một trong những.

+0

Không, tôi thực sự không sử dụng bất kỳ thứ nào trong số này nhưng tôi vẫn cố gắng vô hiệu hóa chúng –

Các vấn đề liên quan