मेरे पास एक एंड्रॉइड एप्लिकेशन है, मुझे एक फ़ंक्शन या ऐसी कोई भी चीज़ चाहिए जो यह जांच सके कि ऐप बंद है या नहीं, गतिविधि बंद नहीं है। मेरे पास इस तरह का एक ऐप है, यदि आप 10 सेकंड के लिए ऐप का उपयोग करते हैं, तो आप कहीं भी किसी भी गतिविधि में हैं, आपको "टाइम आउट" अधिसूचना प्राप्त होगी। मैं ऐसा करने के लिए टाइमर का उपयोग करता हूं, शुरुआत के लिए सब कुछ ठीक काम करता है। हालांकि, जब मैं ऐप बंद करता हूं, तो ऐप को अगली शुरुआत के लिए समय बचा जाना चाहिए। उदाहरण के लिए: यदि मेरे पास केवल 5 सेकंड शेष हैं, तो मैं ऐप बंद कर देता हूं। अगली बार जब मैं ऐप खोलूंगा, तो टाइमर 5 सेकंड से शुरू होगा, 10 सेकंड से नहीं। अगर मैं वेलकमफर्स्ट (गतिविधि जो टाइमर में प्रवेश करता है) पर रुका तो कोई समस्या नहीं है, लेकिन अगर मैं अगली गतिविधि पर जाता हूं, तो टाइमर रद्द कर दिया जाएगा। मैं नहीं चाहता कि, ऐप बंद होने पर ही टाइमर रद्द हो जाएगा।
क्या यह जांचने का कोई तरीका है कि ऐप बंद है या गतिविधि बंद है? मैं गतिविधि लाइफसाइकिल कॉलबैक और एप्लिकेशन क्लास का उपयोग करता हूं। मैं इस समारोह को भी आजमाता हूं
private boolean isAppRunning() {
ActivityManager m = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10);
Iterator<ActivityManager.RunningTaskInfo> itr = runningTaskInfoList.iterator();
int n=0;
while(itr.hasNext()){
n++;
itr.next();
}
if(n==1){ // App is killed
return false;
}
return true; // App is in background or foreground
}
यह काम नहीं करता।
मेरा कोड
public class App extends Application implements Application.ActivityLifecycleCallbacks {
private Long START_TIME_IN_MILLIS = 6000;
private Boolean mTimerRunning = false;
private Long mTimeLeftInMillis = START_TIME_IN_MILLIS;
private CountDownTimer mCountDownTimer;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
@Override
public void onActivityStarted(Activity activity) {
//if the activity is WelcomeFirst then init the timer
if (activity.localClassName == "WelcomeFirst") {
SharedPreferences prefs = getSharedPreferences("prefsDay", Context.MODE_PRIVATE);
mTimeLeftInMillis = prefs.getLong("millisLeft", 10000);
mTimerRunning = prefs.getBoolean("timerRunning", false);
startTimer();
}
}
@Override
public void onActivityStopped(Activity activity) {
//The code below mean if the Activity WelcomeFirst is closed then save the millisLeft for the next start.
if (activity.localClassName == "WelcomeFirst") {
mCountDownTimer.cancel();
mTimerRunning = false;
SharedPreferences prefs = getSharedPreferences("prefsDay", Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putLong("millisLeft", mTimeLeftInMillis);
editor.putBoolean("timerRunning", mTimerRunning);
editor.apply();
}
//I want to make the change. If The App is closed, then save the millisLeft for the next start.
//Not the Activity is closed, then save the millisLeft for the next start
}
private void startTimer() {
mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
mTimeLeftInMillis = millisUntilFinished;
}
@Override
public void onFinish() {
mTimerRunning = false;
Toast.makeText(this, "Time Out",Toast.LENGTH_SHORT).show()
}
}.start();
mTimerRunning = true;
}
1 उत्तर
प्रक्रिया का प्रयोग करें LifeCyclerManager आपकी समस्या का समाधान करेगा। https://medium.com/trendyol-tech/android-architecture- घटक-प्रक्रियाजीवनचक्रस्वामी-26aa905d4bc5
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।