android - 如何检测应用程序是否关闭

标签 android android-intent broadcastreceiver android-broadcast

我有一个应用程序,当我的应用程序在获取时运行时,它会从广播接收器接收数据以从网络(json)获取新数据;一切运行良好,当应用程序关闭时,它会崩溃“您的应用程序停止工作”。即使以下检查我的应用程序是否位于前台的方法也不起作用。 我想要它,所以如果应用程序关闭而不是运行,调用 Intent 打开应用程序以免崩溃,那么如何检查应用程序是否关闭?

我的代码;

public class UpdateReceiver extends BroadcastReceiver {

private static long alarmTime = 0;

@Override
public void onReceive(Context context, Intent intent) {



    if (isAppForground(context)){
        Toast.makeText(context, "APP IN FOREGROUND", Toast.LENGTH_LONG).show();
    } else {
        Intent intentActivity = new Intent(context, MainActivity.class);
        intentActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intentActivity);
        Toast.makeText(context, "APP NOT RUNNING", Toast.LENGTH_LONG).show();
    }

    //set new alarm for next tuesday
    UpcomingFragment.getInstance().setAlarm(-1);
    //updates the current json
    UpcomingFragment.getInstance().update();


}

public static long getAlermTimeInMillis(){
    return alarmTime;
}

public boolean isAppForground(Context mContext) {

    ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
    if (!tasks.isEmpty()) {
        ComponentName topActivity = tasks.get(0).topActivity;
        if (!topActivity.getPackageName().equals(mContext.getPackageName())) {
            return false;
        }
    }

    return true;
}

}

最佳答案

我有完全相同的问题,并且我被困了几天。幸运的是,在第三天,我找到了一个有效的解决方案。

public void onTrimMemory(final int level) {
    if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
        //SCREEN IS NOT SHOWING
}

这个onTrimMemory方法非常有用。它应该用于优化内存中的应用程序,但我们也可以像这样利用它来发挥我们的优势!

关于android - 如何检测应用程序是否关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33818406/

相关文章:

java - 如何更新 Android 中的 Activity ?

android - 协程中的 HandlerThread 替换

android - 在移动到下一个 Activity 之前完整地运行一个函数

android - 在我的 Android 应用程序中接收来电通知

Android - 广播接收器和服务之间的区别

java - 如何设置 TextView 在 Activity 中可见而不是在自定义广播接收器类中?

Android 应用错误 “Unfortunately App has Stopped”

android - 从哪里下载谷歌移动广告 SDK

android - 第二个 Activity 处于 Activity 状态时android中第一个 Activity 的状态

cordova - 在 android WebView 中禁用电子邮件、号码检测