2017-03-03 53 views
0

嘿,我有一个应用程序,现在当APP进入onPause或onDestroy,因为我想在这种情况发生时调用某个函数。 我试图覆盖活动中的onPause并在所有项目中扩展该活动,但onPause在活动之间的每次迁移(这是逻辑上的)上都被调用,但这不是我想要的。 我想如果用户退出应用程序的onDestroy()回调将被调用来知道当用户退出应用程序或暂停它(按home键) 问候,如何检测应用程序何时最小化或退出

+0

你想要听'onStop()'而不是'onPause()'。 –

+1

定义“用户退出应用程序”..在android中没有这样的概念。 **编辑:**你可以在'onPause'中检查'isFinishing()'也许这就是你想要的 – Selvin

+0

我的意思是退出应用程序是推压主页按钮(从任何活动),或退出正常的方式使用返回键。在后退按钮的情况下,很容易我可以覆盖主活动中的onstop,但是从任何活动中按下主页 –

回答

-1

,如果用户按下主页按钮onStop()回调将被调用。

+0

如果我是另外一个活动,那么这两个实现的东西 –

+0

你可以创建一个基本活动,所有活动将会从那一个继承,那样你就可以检测到来自任何活动的回调。 –

-3

它很简单。

您可以通过采取字符串变量如下简单的检查:

static String active = "false"; 
**Thing to do :** 



if (active.equals("pause")) { 
         //do your pause task 
        } 

    @Override 
    public void onPause() { 
     super.onStart(); 
     active = "pause"; 
} 


    @Override 
    public void onStart() { 
     super.onStart(); 
     active = "start"; 
} 


    @Override 
    public void onDestroy() { 
     super.onStart(); 
     active = "destroy"; 
} 

通过检查字符串变量,可以使之成为可能。

在所有的活动中
+0

当整个应用程序暂停时,他正在询问状态。 但是,如果您正在检查静态字符串到活动中,这将无法正常工作,因为onPause也会在您打开新活动时被调用 – Radon8472

0

@Override 
protected void onUserLeaveHint() { 
    super.onUserLeaveHint(); 
    Log.e("TAG", "Activity Minimized"); 
} 

在您的主要活动:

@Override 
public void onBackPressed() { 
    Log.e("TAG", "App Exit"); 
    super.onBackPressed(); 
} 

:没有办法,当应用程序被系统杀死(例如与任务退出检测经理)

+0

活动A =>启动活动B ...不会调用这些活动......但活动A会被“最小化” – Selvin

+0

@Selvin仔细阅读问题, –

+0

是的,我读了......但似乎你不知道活动/应用程序生命周期......应用程序可能在第二个活动中被杀死,然后“App Exit”是从来没有调用和应用程序是死的......唯一的答案是“没有应用程序退出android的概念” – Selvin

-1

所以你想知道整个应用程序什么时候进入到Bacground,从Activity.onPause的方法告诉你何时作为单身活动进入背景。

为了你的需求,你可以添加

到您的Android清单。这将称这样的类为“YourApplication”

public class YourApplication extends Application { 
    @Override 
    public void onCreate() {} 
    public public void onTerminate() { 
    super.onTerminate(); 
    } 
} 

例如,为整个应用程序的“onCreate”或“onTerminate”(而不是每个单独的活动)。 但是java文档说你不应该相信onTerminate会在每个应用程序销毁时被调用(请参阅:android.app.Application subclass, onTerminate is not being called)。

我认为最好的办法是,如果你

  • 在所有的活动中添加自己的了Methode“的onPause”和“的onResume”你的应用程序类
  • 您存储到应用类时的onPause或的onResume被称为
  • 并且当您将所有活动都放在“onPause”
  • 并且您打电话给您的应用程序时,您会给您打电话给您自己的Application.onPause。的onResume当第一个活动是早在 “的onResume”
+0

'onTerminate'从来没有调用 –

+0

比尝试我的解决方案的第二部分。 – Radon8472

0

我用这个方法来检测,如果应用程序切换到后台或者被杀害

第1步: 作出这样

public class OnClearFromRecentService extends Service { 

@Override 
public IBinder onBind(Intent intent) { 
return null; 
服务

}

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
Log.d("ClearFromRecentService", "Service Started"); 
return START_NOT_STICKY; 

}

@Override 
public void onDestroy() { 
super.onDestroy(); 
Log.d("ClearFromRecentService", "Service Destroyed"); 

}

@Override 
public void onTaskRemoved(Intent rootIntent) { 
Log.e("ClearFromRecentService", "END"); 
//Code here 
stopSelf(); 

}}

步骤2)登记的manifest.xml此服务

<service android:name="com.example.OnClearFromRecentService" android:stopWithTask="false" /> 

步骤3)然后在您的飞溅活动启动此服务

startService(new Intent(getBaseContext(), OnClearFromRecentService.class)); 

所以,现在当你的应用程序被手动杀死,onDestroy方法将被称为

试试这个在你的代码,让我知道它的工作。 快乐编码:)

-1

在你的应用类中实现

Application.ActivityLifecycleCallbacks

。这将实现以下ActivityLifeCycle方法:

isActivityVisible() 
onActivityCreated() 
onActivityStarted() 
onActivityResumed() 
onActivityPaused() 
onActivityStopped() 
onActivitySaveInstanceState() 
onActivityDestroyed() 

和寄存器中的OnCreate()应用类等的回调监听:

registerActivityLifecycleCallbacks(this); 

定义应用程序类的全局变量。

私有静态布尔isActive;

现在更改活动生命周期的覆盖的方法是这样的:

public static boolean isActivityVisible() { 
     return isActive; 
    } 

    @Override 
    public void onActivityCreated(Activity activity, Bundle bundle) { 

    } 

    @Override 
    public void onActivityStarted(Activity activity) { 

    } 

    @Override 
    public void onActivityResumed(Activity activity) { 
     isActive = true; 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     isActive = false; 
    } 

    @Override 
    public void onActivityStopped(Activity activity) { 

    } 

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

    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 
      isActive = false; 

    } 

,你可以在isActive变量的值执行所需的操作。

相关问题