2016-07-19 11 views
15

मैं थोड़ी देर के लिए इस अपवाद का कारण जानने के लिए संघर्ष कर रहा हूं, मैं कभी भी खुद को पुन: उत्पन्न करने में सक्षम नहीं हूं लेकिन मेरे कुछ ग्राहक अनुभव कर रहे हैं यह। यह केवल एंड्रॉइड 6.0.1 पर होता है, और चूंकि एसडीके के भीतर दुर्घटना होती है, यह पता लगाना मुश्किल होता है कि यह कैसा होता है।खराब टोकन अपवाद - विंडो जोड़ने में असमर्थ (मार्शमलो - फ़्लोटिंग टूलबार)

इस समस्याओं के बारे में अन्य समाधान जैसे, मदद नहीं की है:

window manager bad token exception

"android.view.WindowManager$BadTokenException: Unable to add window" on buider.show()

मैं DialogFragments और AlertDialogs उपयोग कर रहा हूँ, मुझे लगता है यह मुख्य मुद्दा हो सकता है, लेकिन यह सिर्फ नहीं करता ' टी जोड़ना क्योंकि यह केवल मार्शमलो उपयोगकर्ताओं को प्रभावित करता है।

Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? 
     at android.view.ViewRootImpl.setView(ViewRootImpl.java:849) 
     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:337) 
     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
     at android.widget.PopupWindow.invokePopup(PopupWindow.java:1329) 
     at android.widget.PopupWindow.showAtLocation(PopupWindow.java:1077) 
     at android.widget.PopupWindow.showAtLocation(PopupWindow.java:1035) 
     at com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup.show(FloatingToolbar.java:561) 
     at com.android.internal.widget.FloatingToolbar.show(FloatingToolbar.java:212) 
     at com.android.internal.view.FloatingActionMode$FloatingToolbarVisibilityHelper.updateToolbarVisibility(FloatingActionMode.java:411) 
     at com.android.internal.view.FloatingActionMode$1.run(FloatingActionMode.java:65) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:158) 
     at android.app.ActivityThread.main(ActivityThread.java:7224) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
+0

यदि आपका ऐप उत्पादन में है, तो आपको इस एप को ठीक करना होगा। त्रुटि को स्थानीयकृत करें और कोशिश/पकड़ के साथ घिरा हुआ है जहां पकड़ चुपचाप असफल हो जाएगी - जो ऐप क्रैश होने से 10 गुना बेहतर है। मुझे खेद है कि अगर मुझे बहुत मदद नहीं है, क्योंकि मुझे नहीं पता कि यह क्यों हो रहा है, लेकिन मैं सामान्य रूप से सलाह का एक टुकड़ा पेश करता हूं। – Vucko

+0

मैं पूरी तरह से सहमत हूं, हालांकि यह स्थानीयकरण हिस्सा है जो कठिन है क्योंकि स्टैकट्रैस वास्तव में मुझे वास्तव में ऐसा नहीं होने पर बहुत अधिक संकेत देता है। मैं बस उम्मीद कर रहा हूं कि यहां कोई व्यक्ति यह जान सकता है कि इसका कारण क्या हो सकता है जो मेरी जांच को कम करेगा –

+0

स्टैकट्रैक एक्शन मोड के बारे में बात कर रहा है, इसलिए आपको इस पर ध्यान देना चाहिए। टूलबार में एक्शन मोड आने के लिए आपके उपयोगकर्ता क्या कर सकते हैं? कुछ अजीब कुछ हो सकता है: उपयोगकर्ता कहीं भी टेक्स्ट का चयन कर सकता है, लेकिन उपयोगकर्ता स्पर्श भी एक नई गतिविधि का आह्वान कर सकता है, इसलिए चयन और नई गतिविधि एक ही समय में होती है। –

उत्तर

19

तो एक सैमसंग डिवाइस (S6) प्राप्त करने और इस समस्या को पुन: पेश करने में सक्षम होने के बाद मैं समाधान नीचे वर्णित के साथ आया था।

त्रुटि स्वयं फ़्लोटिंग टूलबार और मार्शमलो में जोड़े गए क्रिया मोड से निकलती है। जब एक मार्शमैलो डिवाइस पर पाठ का चयन, कुछ इस तरह आ जाती है: उपयोगकर्ता तो चल उपकरण पट्टी, सैमसंग उपकरणों पर ऐप्लिकेशन क्रैश बंद किए बिना (जैसे वापस कुंजी) एक और गतिविधि पर जाता

floating toolbar

हैं। यह मूल रूप से आगामी गतिविधि में फ़्लोटिंग टूलबार जोड़ने की कोशिश कर रहा है।

चल उपकरण पट्टी पर अधिक: https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-text-selection

तो समाधान कार्रवाई मोड जीवन चक्र प्रबंधन और यकीन है कि यह खत्म किसी भी नए गतिविधि शुरू होने से पहले करना है। मुझे आधार गतिविधि वर्ग मिला है कि मेरे सभी सक्रियण प्राप्त हुए हैं, इसलिए वहां समाधान जोड़ने के लिए सबसे अधिक समझदारी हुई।

public class BaseActivity extends AppCompatActivity { 

    private ActionMode mActionMode; 

    /** 
    * Store action mode if it is started 
    * @param mode 
    */ 
    @Override 
    public void onActionModeStarted(ActionMode mode) { 
     super.onActionModeStarted(mode); 
     mActionMode = mode; 
    } 

    /** 
    * When activity is paused, make sure action mode is ended properly. 
    * This check would feel better to have in onDestroy(), but that seems to be 
    * too late down the life cycle and the crash keeps on occurring. The drawback 
    * of this solution is that the action mode is finished when app is minimized etc. 
    */ 
    @Override 
    protected void onPause() { 
     super.onPause(); 
     endActionMode(); 
    } 

    /** 
    * Makes sure action mode is ended 
    */ 
    private void endActionMode() { 
     if (mActionMode != null) { 
      mActionMode.finish(); /** immediately calls {@link #onActionModeFinished(ActionMode)} */ 
     } 
    } 

    /** 
    * Clear action mode every time it finishes. 
    * @param mode 
    */ 
    @Override 
    public void onActionModeFinished(ActionMode mode) { 
     super.onActionModeFinished(mode); 
     mActionMode = null; 
    } 
} 
+0

ओह बकवास, मुझे जांचना है और देखना है कि यह मेरे ऐप –

+1

के साथ हो सकता है कि जिस ऐप पर मैं काम कर रहा हूं उसका मुख्य दृश्य वेब व्यू पर आधारित है। इससे इस बग को मेरे लिए और अधिक गंभीर बना दिया गया है क्योंकि उपयोगकर्ताओं के पास बहुत अधिक सामग्री है जो चयन योग्य है और इसलिए बग का अनुभव करने के लिए अधिक प्रवण है –

+0

इस बग को हटाने का प्रयास कर रहे थे!कृपया एंड्रॉइड ट्रैकर पर इस मुद्दे को तारांकित करें ताकि एंड्रॉइड टीम इसे ठीक कर सके https://code.google.com/p/android/issues/detail?id=208906 –

संबंधित मुद्दे