2015-02-18 2 views
0

Я хочу реализовать какую-то функцию монитора, которая сообщает мне, когда мое приложение разбилось или остановилось или на паузе. Таким образом, у меня есть 3 действия, и я до сих пор добился того, что, когда в mainActivity onPause вызывается, он отправит мне почту, однако я хочу знать только, останавливает ли кто-нибудь все приложение, а не только одно из действий (поскольку пользователь прыгает между ними). Есть ли какой-то общий метод onStop() или что-то, что я могу использовать?Мастер onPause() onStop() в android

Спасибо!

Это мой код

protected void onStop() { 

    super.onStop(); 
    new Thread(new Runnable() { 
     public void run() { 
      try { 
       GMailSender sender = new GMailSender(
         "email address", 
         "pw"); 
       sender.sendMail("Pause", "The app has paused", 
         "email address", 
         "email address"); 
      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_LONG).show(); 
      } 
     } 
    }).start(); 
} 
+0

Почтовый бланк журнала регистрации и код. –

+0

Я отправил код, какой журнал вам нужен? проблема в эмуляторе, что функция отправки электронной почты не работает, поэтому я не знаю, поможет ли это –

ответ

0

Может создать три булевы ... activityOneAlive, activityTwoAlive и activityThreeAlive. Когда каждое действие нажимает onStart(), оно записывает true и прямо перед переключением на другое действие в вашем приложении, оно устанавливает свой собственный Boolean в false. Когда какое-либо действие вызывает onPause(), а его логическое значение истинно, отправьте свое электронное письмо.

0

Создайте класс Application и создайте объект, который реализует интерфейс ActivityLifecycleCallbacks. В этом объекте приращивайте целое число в каждом onStart и уменьшите его в каждом onStop. Также в onStop, если целое число равно 0, отправьте свое электронное письмо.

http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html

package com.your.package; 

import android.annotation.TargetApi; 
import android.app.Activity; 
import android.app.Application; 
import android.os.Build; 
import android.os.Bundle; 


public class ExampleApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
      setupLifecycleCallbacks(); 
     } 
     Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
      @Override 
      public void uncaughtException(Thread paramThread, Throwable paramThrowable) { 
       sendEmail(); 
      } 
     }); 
    } 

    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
    private void setupLifecycleCallbacks() { 
     registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { 
      int mActivityCount = 0; 
      @Override 
      public void onActivityCreated(Activity activity, Bundle savedInstanceState) { 

      } 

      @Override 
      public void onActivityStarted(Activity activity) { 
       mActivityCount++; 
      } 

      @Override 
      public void onActivityResumed(Activity activity) { 

      } 

      @Override 
      public void onActivityPaused(Activity activity) { 

      } 

      @Override 
      public void onActivityStopped(Activity activity) { 
       mActivityCount--; 
       if (mActivityCount == 0){ 
        sendEmail(); 
       } 
      } 

      @Override 
      public void onActivitySaveInstanceState(Activity activity, Bundle outState) { 

      } 

      @Override 
      public void onActivityDestroyed(Activity activity) { 

      } 
     }); 
    } 

    private void sendEmail() { 
     new Thread(new Runnable() { 
      public void run() { 
       try { 
        GMailSender sender = new GMailSender(
         "email address", 
         "pw"); 
        sender.sendMail("Pause", "The app has paused", 
         "email address", 
         "email address"); 
       } catch (Exception e) { 
        Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }).start(); 
    } 
} 
0

Добавить частное поле в класс активность:

private userIsLeavingActivity = false; 

public onStart(){ 
    ... 
    userIsLeavingActivity = false; 
    ... 
} 

public onbackPressed(){ 
    ... 
    userIsLeavingActivity = true; 
    ... 
} 

public onUserLeaveHint(){ 
    ... 
    userIsLeavingActivity = true; 
    ... 
} 

public onPause(){ 
    if(isFinishing()){ 
     // activity is finishing, not just paused. 
    } 
} 

public onStop() 
{ 
    if(userIsLeavingActivity){ 
     // do what you want going to another activity or app 
    } 
    else{ 
     // your activity is being stopped by something else 
    } 

Вы могли бы это в мастер Activity затем расширить свои другие мероприятия от этого. Конечно, я забыл вызовы super() и так далее. Нуждается в некоторой адаптации, но вы должны быть в состоянии объединить все это, чтобы точно определить, почему ваша деятельность приостанавливается или останавливается.

Проблема, которую вы теперь должны решить, является универсальным исключением. See this question.

 Смежные вопросы

  • Нет связанных вопросов^_^