android 判断切换后台 判断按下home键

写这个博客不是为了实现监听home键,而是判断切换后台 ,说过不写一些没意思的博客,监听home键 或者屏蔽home键的方法,请百度。

我这个篇博客只是想写两种状态的判断:

1.应用切换到后台的监听或者说是判断。

2.应用切换到后台后重新打开的监听判断。

那么,问题来了,假如你的公司有个需求:在app每次切换到后台之后,判断当前跟一个建立socket连接的服务器是否断开。

卧槽,你们城里人需求真多,好烦,这个好难实现。

解决方案大概有两种方案,应用后台后重新开的的时候走了那些方法,这个看下activity的生命周期,看下好像没法做判断。有些情况比较复杂,每次都走resume,但又不是每次都走onreate  onstart一些列的方法。

那么这个套路走步不通,我们试着在activity被隐藏的地方入手,activity a跳转到activity b的时候pause了,stop了,那么,在自己的应用内activity的跳转也会触发这个东西。

但是他跟按下home键,或者在我们的app里打开其他应用的区别在哪里呢?

解:区别在于切换到其他应用,当前在前台的应用就不是我们自己的包了。那么,我们可以用过获取当前app的前台应用的包名来判断是否是我们自己的app,即可实现。

但是,问题又来了,如果我们最后一个页面finish了呢,不也是的吗 ?

这个切换后台和finish能否区分分开呢?

解: 可以。

那么,这样子所有的问题都解决了切换到后台的判断了。切换到后台的时候做一个记录就行了,记录下当前是否被后台,下次重新打开的时候判断下是否之前被后台过,如果被后台过,就去判断下sokect是否在连接中即可,还要把后台的记录给重置。

理论上流程就是这样子,stop的时候,判断activitymanage中获取最前台的那个应用是否是本应用 ,不是的话就被后台了,还有就是价格判断如果被finish了,就不做记录了。

好了,上代码:

    private boolean isFinished = false;
    private final String  RUN_SP_KEY="isRunningBackGround";
    @Override
    public void finish() {
        super.finish();
        isFinished = true;
    }

    //如果isFinished等于false,表示当前Activity仅切换到后台运行,并没有退出。
    @Override
    protected void onStop() {
        super.onStop();
        if (!isFinished) {
            String packageName="com.XXX.mypackagename";//我们自己的应用的包名
            String topActivityClassName= PackageUtils.getTopActivityName(this);
            if (packageName!=null&&topActivityClassName!=null && !topActivityClassName.startsWith(packageName))
            {
                //app已经后台
                SPUtils.put(this, RUN_SP_KEY, true);
            }
        }
    }

上面这是在stop的时候的处理,接下来的是启动的时候的处理。

    protected void onResume() {
        super.onResume();
        boolean isReOepn = (Boolean) SPUtils.get(this, RUN_SP_KEY, false);
        if (isReOepn) {已经断开
            if (isConnect()) {
                SPUtils.put(this, RUN_SP_KEY, false);

            }else {
                showConnectPopupWindow();//弹出断开连接提示的poupwindow
            }
        }

    }
时间: 2024-10-10 02:26:29

android 判断切换后台 判断按下home键的相关文章

[FMX]将 Android 程序切换到后台及从后台切换到前台实现

有时候,我们需要将自己的Android程序切换到后台运行,在必要时,将其切换到前台运行.下面提供了一种实现方式,首先需要引用三个单元: 1 uses Androidapi.JNI.App,Androidapi.JNI.GraphicsContentViewText,Androidapi.Helpers; 将应用程序切换到后台,这里提供了两种方法,一种是将应用切换回桌面来实现,执行后相当于按下 Home 键: 1 2 3 4 5 6 7 8 9 10 procedure SendAppToBack

android 语言切换过程分析 (zhuan)

最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知.为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料.(主要参考了http://blog.csdn.net/wqhjfree/article/details/8244520)在这里我将自己的探索记录下来,作为自己的学习记录,也希望能对有同样需要的人有个帮助.刚学android不久,如果中间有什么问题不对的请多多谅解,并指出错误,多交流,共同进步下. 1.从setting入手,我们可以知道

Android中的启动模式(下)

在这篇文章中,我会继续跟大家分享有关于Android中启动模式的相关知识.当然,如果对这个启动模式还不完全了解或者没有听过的话,可以先看看我之前写的有关于这个知识点的入门篇Android的启动模式(上).好了,言归正传,在上一篇已经介绍过,activity在栈中默认不能重排,因此,应用中的一个activity可能被多次实例化并且压入同一个栈中,如图所示: 如果此时使用back键返回,activity的每个实例都将会按照打开的顺序重新出现.这势必会导致用户生体验效果,因此要改变这种现象或者解决上篇

android 语言切换过程分析

android 语言切换过程分析 2014-02-27 18:13 1207人阅读 评论(0) 收藏 举报 语言切换android语言切换android改变语言 最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知.为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料.(主要参考了http://blog.csdn.net/wqhjfree/article/details/8244520)在这里我将自己的探索记录下来,作为自己的学习记录,也希

Android最佳实践之Notification、下拉刷新、内存及性能建议等

Notification通知 参考地址:http://developer.android.com/training/notify-user/index.html 通知(Notification)是Android中使用的非常多的一个事件提示机制. 创建一个Notification 例子中的Notification是基于Support Library中的NotificationCompat.Builder类.我们使用时要继承这个类,它提供了各个平台最好的Notification支持. 创建一个Not

Android 自学之基本界面组件(下)

按钮(Button)与图片按钮(ImageButton)组件的功能和用法 Button继承了TextView,ImageButton继承了Button.不管是Button还是ImageButton,他们的功能都很单一,主要是在UI界面生成一个按钮,该按钮可以供用户单击,当用户单击按钮后出发一个Onclick事件. Button  和  ImageButton的不同在于Button生成的按钮显示文字,ImageButton生成的按钮显示图片.(关于ImageButton属性android:text

微信app支付(android端+java后台)

本文讲解使用微信支付接口完成在android开发的原生态app中完成微信支付功能, 文章具体讲解了前端android如何集成微信支付功能以及后台如何组装前端需要支付信息, 话不多话, 具体看文章内容吧00:00 / 07:03正常 本实例项目运行条件: 开发环境: [Android Studio] 到微信开放平台注册帐号并且创建移动应用 https://open.weixin.qq.com/cgi-bin/frame?t=home/app_tmpl&lang=zh_CN Column 1 Col

Android 静默安装/后台安装& Root permission

Android 静默安装/后台安装& Root permission 静默安装其实很简单,今天在网上找资料找半天都说的很复杂,什么需要系统安装权限.调用系统隐藏的api.需要系统环境下编译.需要跟systemUI同进程什么的.我不知道他们真的实现了静默安装实现方式,亲测效果跟豌豆荚一样,并且实现起来非常简单: 1.支持静默安装的机器必须Root,这个不需要我多讲了. 2.使用pm指令安装即可.     3.特别注意 PM指令不支持中文,也就说路径中有中文会导致安装失败! 关键代码如下: exec

android + eclipse + 后台静默安装(一看就会)

首先要说到三个类. [java] view plaincopy import android.content.pm.IPackageInstallObserver; import android.content.pm.IPackageInstallObserver$Stub; import android.content.pm.PackageManager; 其中,IPackageInstallObserver和IPackageInstallObserver$Stub 这两个类,在android