嘿,我有一个应用程序,我想在APP进入onPause或onDestroy时,因为我想在发生这种情况时调用某个函数。 我试图在一个活动中覆盖onPause并在所有项目中扩展该活动,但是在活动之间的每次迁移时都会调用onPause(这是合乎逻辑的),但这不是我想要的。 我想知道用户何时退出应用程序或暂停应用程序(按主页按钮) 的问候,
答案 0 :(得分:1)
在您的所有活动中:
@Override
protected void onUserLeaveHint() {
super.onUserLeaveHint();
Log.e("TAG", "Activity Minimized");
}
在您的主要活动中:
@Override
public void onBackPressed() {
Log.e("TAG", "App Exit");
super.onBackPressed();
}
注意:无法检测系统何时杀死应用程序(例如退出任务管理器)
答案 1 :(得分:1)
在build.gradle文件中提取此依赖项:
dependencies {
implementation "android.arch.lifecycle:extensions:1.1.1"
}
然后在Application类中使用:
public class MyApplication extends Application implements LifecycleObserver {
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private void onAppBackgrounded() {
Log.d("MyApp", "App in background");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void onAppForegrounded() {
Log.d("MyApp", "App in foreground");
}
}
更新您的AndroidManifest.xml文件:
<application
android:name=".MyApplication"
....>
</application>
答案 2 :(得分: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方法
尝试使用您的代码并告诉我它是否正常工作。 快乐编码:)
答案 3 :(得分:-1)
如果用户退出应用程序,将调用onDestroy()回调,如果用户按下主页按钮,将调用onStop()回调。
答案 4 :(得分:-1)
因此,您想知道整个应用程序何时进入Bacground,Activity.onPause中的方法会告诉您单个活动何时进入后台。
根据您的需要,您可以添加
到您的Android清单。这将使用名称&#34; YourApplication&#34;
调用这样的类public class YourApplication extends Application {
@Override
public void onCreate() {}
public public void onTerminate() {
super.onTerminate();
}
}
e.g。为&#34; onCreate&#34;或者&#34; onTerminate&#34;整个应用程序(不是每个活动)。 但是java文档说你不应该相信在每个应用程序销毁时调用onTerminate(参见:android.app.Application subclass, onTerminate is not being called)。
我认为最好的方法是,如果你
答案 5 :(得分:-1)
实施
Application.ActivityLifecycleCallbacks
在您的应用程序类中。它将实现以下ActivityLifeCycle方法:
isActivityVisible()
onActivityCreated()
onActivityStarted()
onActivityResumed()
onActivityPaused()
onActivityStopped()
onActivitySaveInstanceState()
onActivityDestroyed()
并在应用程序类的OnCreate()中注册回调侦听器,如:
registerActivityLifecycleCallbacks(this);
在应用程序类中定义一个全局变量。
private static boolean 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变量的值执行所需的操作。
答案 6 :(得分:-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";
}
通过检查String变量,您可以实现。