2013-08-21 7 views
8

मुझे अपने उपयोगकर्ताओं की बहुत छोटी संख्या के लिए एक बहुत ही भ्रमित समस्या का सामना करना पड़ रहा है। त्रुटि तब होती है जब एक टुकड़े के अंदर एक बटन दबाया जाता है, जो एक और टुकड़ा गतिविधि शुरू करता है। त्रुटि की इस पंक्ति के कारणफ्रैगमेंट गतिविधि - ऐप की मृत्यु हो गई, कोई सहेजी गई स्थिति

I/20:22:23.901 ActivityManager(1668) 
Start proc com.brandall.nutter for activity com.brandall.nutter/.ActivityHomeFragment: pid=8956 uid=10125 gids={50125, 3003, 3001, 3002, 1015, 1023, 1006, 1028} 
I/20:22:23.881 WindowState(1668) 
WIN DEATH: Window{41ed1948 u0 com.brandall.nutter/com.brandall.nutter.ActivityLinkAppsFragment} 
W/20:22:23.881 ActivityManager(1668) 
Force removing ActivityRecord{411c4188 u0 com.brandall.nutter/.ActivityLinkAppsFragment}: app died, no saved state 
I/20:22:23.881 WindowState(1668) 
WIN DEATH: Window{41b6a178 u0 Toast EXITING} 
W/20:22:23.881 InputDispatcher(1668) 
Attempted to unregister already unregistered input channel '41ed1948 com.brandall.nutter/com.brandall.nutter.ActivityLinkAppsFragment (server)' 
W/20:22:23.871 ActivityManager(1668) 
Scheduling restart of crashed service com.brandall.nutter/.TTSS in 80000ms 
I/20:22:23.871 ActivityManager(1668) 
Process com.brandall.nutter (pid 8907) has died. 
I/20:22:23.871 WindowState(1668) 
WIN DEATH: Window{411d4ff0 u0 com.brandall.nutter/com.brandall.nutter.ActivityHomeFragment} 
E/20:22:23.871 InputDispatcher(1668) 
channel '41ed1948 com.brandall.nutter/com.brandall.nutter.ActivityLinkAppsFragment (server)' ~ Channel is unrecoverably broken and will be disposed! 
W/20:22:23.871 InputDispatcher(1668) 
channel '41ed1948 com.brandall.nutter/com.brandall.nutter.ActivityLinkAppsFragment (server)' ~ Consumer closed input channel or an error occurred. events=0x9 

:: यहाँ स्टैक ट्रेस है

com.brandall.nutter/.ActivityLinkAppsFragment}: app died, no saved state 

मैं टुकड़ा बचाया राज्यों के बारे में कई पोस्ट पढ़ कर दिया गया है, लेकिन कोई भी मेरी परिस्थितियों में लागू करने के लिए, बल्कि लगते हैं खुद को टुकड़े टुकड़े करने के लिए, जो स्टैक ट्रेस में उल्लेख नहीं किया गया है। अन्य पदों प्रत्येक टुकड़ा करने के लिए जोड़ने का सुझाव:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
} 

मैं वर्तमान में मेरे टुकड़े में से किसी में onCreate विधि ओवरराइड नहीं करें।

मैं भी देखा हर टुकड़ा करने के लिए इस जोड़ने का सुझाव दिया गया है:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    setUserVisibleHint(true); 
} 

अलावा तथ्य यह है कि यह केवल उन का एक बहुत छोटी संख्या के लिए हो रहा है से, सबसे चौंकाने मुद्दा इस्तेमाल किया प्रसंग के साथ है:

final Intent sa = new Intent(getActivity(), ActivityLinkAppsFragment.class); 
getActivity().startActivity(sa); 

मेरा आवेदन एक अग्रभूमि सेवा है और अगर मैं बजाय ऊपर आशय में (एक स्थिर getServiceContext() विधि के माध्यम से) कि के स्थिर संदर्भ का उपयोग करें, समस्या नहीं रह गया है उपयोगकर्ताओं और टुकड़ा गतिविधि सही ढंग से खुल जाता है के लिए होता है ।

मुझे समझ में नहीं आ रहा है कि किसी अन्य संदर्भ के उपयोग को समस्या को से क्यों रोकना चाहिए, लेकिन मुझे उम्मीद है कि मैंने जो जानकारी दी है, वह किसी के लिए समझ में आएगी!

मैं फ्रैगमेंट पेजर एडाप्टर कोड की आपूर्ति कर सकता हूं जिसका उपयोग मैं प्रासंगिक होने के लिए कर रहा हूं, लेकिन यह काफी मानक है। कुछ बहुत ही महत्वपूर्ण मैं जोड़ने के लिए भूल गया -

मैं अग्रिम

संपादित धन्यवाद। इससे ऐप को क्रैश नहीं कर सकता है। इसके बजाए जिस गतिविधि से फ्रैगमेंट है, तुरंत पुनः प्रारंभ हो जाता है।

उत्तर - इस वजह से कारण मुझे परिस्थितियों में System.exit(0) बुला लिए मैंने सोचा था कि तभी संभव है जब उपयोगकर्ता फ्लश 'ऐप्लिकेशन की स्मृति उपयोग करना चाहता था था। मैं गलत था और यह भी कहा जा सकता था जब उपयोगकर्ता का डिवाइस कम स्मृति स्थितियों को संभालने में था। @ beworker का उत्तर नीचे सही के रूप में चिह्नित किया गया है, क्योंकि उन्होंने ActivityManagerService.handleAppDiedLocked() पर ध्यान दिया जो इसका परिणाम था।

+1

क्या यह तब भी होता है जब आप 'गतिविधि' में श्रोता को पंजीकृत करने और 'प्रारंभ गतिविधि' को संभालने के अनुशंसित पैटर्न का उपयोग करते हैं?'टुकड़े' को कभी भी 'क्रियाकलाप' शुरू नहीं करना चाहिए क्योंकि उनके लिए कोई तरीका नहीं है कि कोई गतिविधि शुरू होनी चाहिए या एक टुकड़ा जोड़ा/बदला जाना चाहिए। साथ ही, आप यहां 'Intent.FLAG_ACTIVITY_NEW_TASK' का उपयोग क्यों कर रहे हैं? –

+0

@PaulBurke ध्वज वहां नहीं होना चाहिए - misleadinng होने के लिए खेद है, यह मेरे परीक्षण से बचा है, मैं इसे प्रश्न से हटा दूंगा। जैसे-जैसे मैं अपनी गतिविधियों को एक बहुत ही सरल ढेर के रूप में संभालता हूं, मुझे कभी यह विचार नहीं करना पड़ता कि उन्हें 'शुरू किया जाना चाहिए' या नहीं। मैं आपके द्वारा वर्णित श्रोता दृष्टिकोण की खोज करूंगा। धन्यवाद। – brandall

+0

@brandall क्या आप फ्रैगमेंट की 'ऑनक्लिक()' और जीवन चक्र विधियों को साझा कर सकते हैं? –

उत्तर

10

मैंने स्टैक ट्रेस में संदेश के लिए एंड्रॉइड स्रोत कोड देखा और पाया कि यह ActivityManagerService.handleAppDiedLocked() विधि से आता है। इस विधि के विवरण कहते हैं "उस प्रक्रिया के परिणामस्वरूप गतिविधि प्रबंधक से मौजूदा प्रक्रिया को हटाने के लिए मुख्य कार्य। प्रक्रिया के सभी कनेक्शन साफ़ करता है।" ऐसा तब होता है जब एप्लिकेशन मारे जाते हैं। इसे सिस्टम द्वारा किसी अन्य एप्लिकेशन (जैसे एक कार्य प्रबंधक ऐप) या जब एप्लिकेशन स्वयं ही समाप्त हो जाता है (उदाहरण के लिए System.exit(0)) द्वारा सिस्टम द्वारा मारा जा सकता है।

+0

दिलचस्प - इससे बहुत कम मुद्दों की व्याख्या होगी! मैं अब इसे पढ़ूंगा और अपने उपयोगकर्ताओं से जांच करूंगा! धन्यवाद। – brandall

+0

मैंने इस मुद्दे के साथ अपने कुछ उपयोगकर्ताओं के साथ जांच की है और उनके पास कोई कार्य हत्यारा स्थापित नहीं है ... मैं वास्तव में उम्मीद कर रहा था कि आप सही थे! – brandall

+0

आप सही थे - उपयोगकर्ता के दृष्टिकोण से नहीं, बल्कि ऐप में मेरे कार्यान्वयन से। मैं System.exit (0) को बुला रहा था; कुछ परिस्थितियों में जो मैंने सोचा था कि कभी निष्पादित नहीं किया जाएगा - मैं गलत था, ऐसा लगता है, भारी मेमोरी लोड के तहत, मुझे लगता है। यह उत्तर था जो दो - http://stackoverflow.com/a/14756126/1256219 से जुड़ा हुआ है यदि आप उस पोस्ट के संदर्भ के साथ अपना उत्तर अपडेट करना चाहते हैं और आप कैसे जानते थे कि यह ActivityManagerService.handleAppDiedLocked() से संबंधित है, तो मैं ' इसे सही के रूप में चिह्नित करेंगे। धन्यवाद! – brandall

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