2009-09-20 12 views
9

मेरे पास 3 अलग-अलग गतिविधियां हैं जो उपयोगकर्ता किसी विशेष क्रम में बीच में स्थानांतरित होती हैं। मेरे यह दोहरा लक्ष्य:एंड्रॉइड - अंतिम बार देखा गया गतिविधि

  1. उपयोगकर्ता कुछ और जब एप्लिकेशन फिर से शुरू है मैं शुरू करना चाहते हैं, जहां उपयोगकर्ता छोड़ दिया है, भले ही एप्लिकेशन समाप्त किया गया पर स्विच करता है जब
  2. जब पिछले गतिविधि फिर से शुरू है मैं अंतिम बार देखे गए करने के लिए इसे बहाल करना चाहते जहाँ मैं काफी मैं क्या जरूरत है मिलता है, लेकिन onCreate() अगर एप्लिकेशन समाप्त किया गया - राज्य (यह एक मुझे लगता है कि मैं कैसे हासिल करने के बारे में एक बहुत अच्छा विचार है)

मैं इस समस्या में सोच भी नहीं प्रारंभ/बंद है । उस स्थिति में - यह उस गतिविधि को चुनता है जिसे मैंने मैनिफेस्ट में कॉन्फ़िगर किया था। मुझे लगता है कि मैं उस डिफ़ॉल्ट गतिविधि के onCreate() विधि में कुछ डाल सकता हूं लेकिन क्या कोई बेहतर तरीका है कि मैं शायद गायब हूं?

उत्तर

6

यदि आपका ऐप नहीं किया गया "समाप्त" है तो # 1 पहले से ही काम करना चाहिए और # 2 बस onSaveInstanceState() में कोई मान जो बंडल में स्वतः प्रबंधित नहीं किया जाता बचत तो onRestoreInstanceState() में उन्हें बहाल करने की आवश्यकता है।

यह एक हैक की तरह है, लेकिन मुझे लगता है कि वास्तव में समाप्त होने वाले ऐप के मामले में # 1 के लिए आपका सबसे अच्छा विकल्प होगा, जब आप पहली बार अपने प्रत्येक गतिविधि कक्षाओं के रेस्यूम में सबसे हालिया गतिविधि को सहेज लेंगे अपनी पहली गतिविधि के क्रिएट को चलाएं चेक करें, फिर सही गतिविधि शुरू करें ... शायद शुरुआत में भी एक खाली गतिविधि में डाल दें। कुछ इस तरह:

StartActivity:

public class StartActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // get last open Activity 
     String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", ""); 
     if (last_activity == MyActivity2.getSimpleName()) { 
      startActivityForResult(new Intent(this, MyActivity2.class)); 
     } else if (last_activity == MyActivity3.getSimpleName()) { 
      startActivityForResult(new Intent(this, MyActivity3.class)); 
     } else { 
      // assume default activity 
      startActivityForResult(new Intent(this, MyActivity1.class)); 
     } 
    } 

    public void onActivityResult() { 
     // kill the activity if they go "back" to here 
     finish(); 
    } 
} 
फिर अन्य सभी गतिविधियां (MyActivity1,2,3) तो जैसे मूल्यों को बचाने में

:

@Override 
public void onResume() { 
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit(); 
    e.putString("last_activity", getClass().getSimpleName()); 
    e.commit(); 

    super.onResume(); 
} 

तुम भी संभाल करने के लिए होगा मैन्युअल रूप से प्रत्येक गतिविधि के लिए डेटा को सहेजना/बहाल करना। आप प्रत्येक क्रियाकलाप के ऑनपॉज़() के अंदर वरीयताओं में आवश्यक सभी मूल्यों को सहेज सकते हैं, फिर इसे ऑनस्यूम() में पुनर्स्थापित कर सकते हैं।

+0

धन्यवाद fiXedd, मुझे नहीं लगता कि यह एक हैक है। यह एक प्रेषक पैटर्न की तरह लगता है। मैं बस उम्मीद कर रहा था कि मुझे कुछ याद आ रहा है और ऐसा करने का एक आसान तरीका है। – Bostone

+0

स्टार्ट एक्टिविटी के बारे में कैसे करें और फिर स्टार्ट एक्टिविटीफॉर रिसेट के बजाय बस() खत्म करें? –

+0

मैनिफेस्ट में अपनी गतिविधि लॉन्च मोड सेटिंग पर भी ध्यान दें। मैंने इसे "सिंगल टास्क" पर सेट किया था, लेकिन इसे अंतिम गतिविधि को फिर से शुरू करने के लिए इसे "सिंगलटॉप" में बदल दिया। मुझे http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode पर एक अच्छा स्पष्टीकरण मिला –

0

मेरा मानना ​​है कि आप SaveInstanceState पर लागू करना चाहते हैं और यह आपकी गतिविधियों को वर्तमान स्थिति को बंडल में संग्रहीत करेगा। उस बंडल को आपकी गतिविधि में क्रेट में पारित किया जाएगा, और आप इसका उपयोग अपने मूल्यों को रीसेट करने के लिए कर सकते हैं।

http://developer.android.com/guide/topics/fundamentals.html#actstate

+0

जो कि मैं समझता हूं कि ज्यादातर # 2 के लिए जाता है। मुझे उस गतिविधि को चुनने की ज़रूरत है जो उपयोगकर्ता अंतिम बार देख रहा था। तो मैं अपने राज्य को पुनर्स्थापित कर सकता हूं – Bostone

1

ध्यान रखें कि ऑनवेस्टेंसस्टेट() लंबी अवधि के राज्य के लिए काम करने योग्य नहीं है, यानी उपयोगकर्ता फोन को शक्ति देता है और फिर इसे बाद में अनिश्चित बिंदु पर बदल देता है। यदि आप अपने राज्य को बिजली चक्रों से बचने की इच्छा रखते हैं तो आपको अपनी दीर्घकालिक राज्य तंत्र बनाने की आवश्यकता होगी।

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