2015-09-10 15 views
5

मैं एक सेवा है, का पता लगाने onStartCommand() यह करने के लिए समान के साथ: जाहिर हैसेवा दुर्घटना

private User user; 

@Override 
public int onStartCommand(@Nullable final Intent intent, final int flags, final int startId) { 
    if (user == null) { 
     user = UserList.getInstance().getSpecialUser(); 
    } 
    Assert.assertNotNull(user); 

    // 
    // Build notification here, seomehow based on user object 
    // 
    startForeground(42, notification); 

    return START_STICKY; 
} 

, मैं अपने सेवा अग्रभूमि में चलाने के लिए, और जब तक संभव हो के लिए चलाना चाहते हैं।

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

क्या दुर्घटना का पता लगाने का कोई तरीका है जो मुझे स्थिति को अधिक सुदृढ़ तरीके से संभालने की अनुमति देगा?

+3

डीबग अपने नेटवर्क की कक्षाओं में एक uncaughtExceptionHandler बनाने ??? –

+0

UserList.getInstance() वापस क्या करना चाहिए? –

+0

मैं उपयोगकर्ता सूची का उल्लेख करना भूल गया हूं, इसलिए यह उपयोगकर्ता सूची का "वैश्विक" उदाहरण लौटाता है। – Pitel

उत्तर

4

अपने आवेदन

public class MyApplication extends android.app.Application{ 

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

     Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { 

      @Override 
      public void uncaughtException(Thread arg0, Throwable arg1) { 
       doSomething(); 
      } 
     }); 
    } 
} 
+0

यह मेरे लिए काम है। धन्यवाद –

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