2014-06-25 9 views
6

आवेदन निकास पर कुछ कोड कैसे निष्पादित करें? मैं आवेदन निकास पर अस्थायी डेटा हटाना चाहता हूं। एप्लिकेशन से बाहर निकलने का मतलब है कि ऐप पृष्ठभूमि में कम से कम नहीं चल रहा है और यह पूरी तरह से चला गया है।एंड्रॉइड पर एप्लिकेशन निकास का पता लगाने के लिए कैसे?

मैंने सेवा बनाने की कोशिश की जो अलग प्रक्रिया में चलता है, सेवा जांच रही है कि ऐप प्रक्रिया नहीं चल रही है तो इसे अस्थायी फ़ोल्डर को हटाना चाहिए। इस दृष्टिकोण के साथ अस्थायी फ़ोल्डर हमेशा हटाया नहीं जाता है क्योंकि प्रक्रिया अभी भी सबसे कम प्राथमिकता के साथ चल रही है।

मैं OnDestroy() में ऐसा नहीं कर सकता।

सेवा कोड:

@Override 
public void onTaskRemoved(Intent rootIntent){ 

    super.onTaskRemoved(rootIntent); 
} 

उदाहरण मैं था के लिए:

[Service(Process = "com.lobomonitor")] 
[IntentFilter(new string[] { "com.androidgui.ProcessMonitorService" })] 
public class ProcessMonitorService : Service 
{ 
    public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) 
    { 
     Thread processThread = new Thread(() => 
              { 
               ActivityManager actManager = (ActivityManager) this.GetSystemService(ActivityService); 
               while (true) 
               { 
                Thread.Sleep(1000); 
                IList<ActivityManager.RunningAppProcessInfo> procList = actManager.RunningAppProcesses; 
                procList.Any(i => i.ProcessName.Equals("com.androidgui")); 
                if (!procList.Any(i => i.ProcessName.Equals("com.androidgui"))) 
                { 
                  FolderManager.Singleton.DeleteTempFolder(); 
                  break; 
                } 
               } 
              }); 
     processThread.Start(); 
     return StartCommandResult.RedeliverIntent; 
    } 

    public override IBinder OnBind(Intent intent) 
    { 
     return null; 
    } 
} 
+0

http://stackoverflow.com/questions/16298795/is-it-possible-to-detect-exit-of-an-plication –

+1

http://stackoverflow.com/questions/6682792/android-can-i -डेटा-द-यूजर-है-बाएं-द-ऐप –

+0

एप्लिकेशन लाइफ चक्र एंड्रॉइड ओएस द्वारा प्रबंधित किया जाता है, मुझे लगता है कि इसे पहचानना संभव नहीं है। http://stackoverflow.com/questions/2033914/quitting-an-plication-is-that-frowned-upon – naveejr

उत्तर

11

मुझे लगता है कि मदद करता है, तो है, लेकिन अगर आप अपने अनुप्रयोग को मारने, तो सेवा है जो पृष्ठभूमि में चलता है प्रणाली को बुलाती है पता नहीं है एक बार ऐप जो सेवा चला रहा था। जब मैंने ऐप को मार दिया - सेवा भी मर गई, लेकिन मैं चाहता था कि वह जिंदा रहे। onTaskRemoved का उपयोग करके मैं सेवा को फिर से प्रारंभ का समय निर्धारित करने में सक्षम था: -> मैं अपने ऐप की हत्या कर रहा हूँ -

@Override 
public void onTaskRemoved(Intent rootIntent){ 
    Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass()); 
    restartServiceIntent.setPackage(getPackageName()); 

    PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT); 
    AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
    alarmService.set(
      AlarmManager.ELAPSED_REALTIME, 
      SystemClock.elapsedRealtime() + 1000, 
      restartServicePendingIntent); 

    super.onTaskRemoved(rootIntent); 
} 

प्रभाव था> सेवा देखते हैं कि कार्यों हटाया जा रहा है और onTaskRemoved कॉल -> मैं 1 में सेवा को फिर से प्रारंभ का समय निर्धारण कर रहा हूँ सेक -> सेवा मर जाती है -> एक सेकंड के बाद यह उठता है -> परिणाम: ऐप मारे गए, मैंने कोड को निष्पादित किया जो मेरी सेवा को पुनरारंभ करता है, इसलिए यह अभी भी पृष्ठभूमि में चल रहा है (केवल वरीयताओं में दिखाई देता है -> प्रक्रिया के रूप में अनुप्रयोग)

http://developer.android.com/reference/android/app/Service.html

void  onTaskRemoved(Intent rootIntent) 

टी उसे कहा जाता है कि सेवा वर्तमान में चल रही है और उपयोगकर्ता ने उस कार्य को हटा दिया है जो सेवा के आवेदन से आता है।

+0

धन्यवाद। यह वह व्यवहार है जो मैं चाहता था। मैंने बस FolderManager.Singleton.DeleteTempFolder() को बुलाया; OnTaskRemoved() में। – Xzil0

+0

धन्यवाद, मैं इस तरह कुछ खोज रहा था – takluiper

1

मेरा अनुभव दिखाता है कि अधिकांश ऐप्स को वास्तव में के बाहर निकलने-कॉलबैक की आवश्यकता नहीं है जिसका आप वर्णन कर रहे हैं।

एंड्रॉइड तरीका, जो आमतौर पर ठीक काम करता है, घटक-स्तर (गतिविधि, सेवा ..) जीवन चक्र प्रबंधन का है।

कुछ ऐप्स उपयोगकर्ता से सक्रिय करते समय 'बाहर निकलें' कार्यक्षमता (बटन, मेनू आदि के माध्यम से) की अनुमति देते हैं, तो ऐप को सभी खुले घटकों को बंद करने और मूल रूप से नीचे जाने की अनुमति देता है।

लेकिन, अगर बाहर निकलें-कॉलबैक वास्तव में आप क्या चाहते है, यह करने के लिए निकटतम बात शायद OnDestroy के अलावा अन्य कोई तर्क() फ़ंक्शन और कभी बंद किए बिना एप्लिकेशन स्टार्टअप पर इसे सक्रिय करने के साथ एक समर्पित सेवा बनाने के लिए किया जाएगा यह!

class ExitListenerService extends Service { 
    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     // App exit logic here. Not deterministic! 
    }  
} 

बाधाओं ऐसी सेवा शायद आखिरी घटक ऑपरेटिंग सिस्टम द्वारा पुन: दावा किया जा करने के लिए किया जाएगा रहे हैं। यह ज्यादातर मामलों में काम करना चाहिए, यह मेरे लिए ठीक काम किया। लेकिन यह 100% गारंटी नहीं है।

लेकिन .. यदि आपके पास बुलेट प्रूफ समाधान होना चाहिए तो मुझे एक और तरीका है जो मुझे पता है कि एक पीयर एप्लिकेशन बनाना है, इसे वॉचडॉग कहते हैं, जो समय-समय पर मौसम की जांच करने के लिए जागृत होगा या नहीं, आपका मुख्य ऐप अभी भी चल रहा है और , यदि नहीं चल रहा है, तो बाहर निकलने के तर्क को सक्रिय करेगा।

यह पिछले जाँच आप

List<RunningAppProcessInfo> runningApps = activityManager.getRunningAppProcesses(); 

फोन और runningApps से अधिक पुनरावृति अपनी खुद की तलाश करने की आवश्यकता होगी चलाने के लिए।

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