检查app的activity是否在当前

简介: <p style="text-indent:15px; margin-top:0px; margin-bottom:1em; font-size:15px; word-break:break-word; white-space:pre-wrap; word-wrap:break-word; line-height:1.7em; overflow:auto; color:rgb(51,51,

APP开发中经常会遇到这种需求,需要检查当前的APP是不是可见的,比如,如果是可见的就维持一个socket长连接,如果切到后台不可见了,就断开这个连接。Android本来并不允许APP去监听home键事件,所以我们没发像iOS那样通过监听home键事件来做对应的处理。不过还好Android的Activity的生命周期给我们提供了一种解决这个问题的方法,我们只需要在每个Activity的onStart和onStop中去维持一个计数,如果这个数值大于0,就表示我们的APP还有Activity是在前台运行的,等于0,就表示APP已经被切换到后台。

说到这里你可能要想,是不是直接修改我的APP的BaseActivity,在基类里做计数的事情就好了。当然,这是最直接的一种方法。但是,这种方法需要你去修改自己的基类代码,侵入性太强,我不是很喜欢这种方法。更好的方式是使用sdk提供的Application.ActivityLifecycleCallbacks接口。下面的代码展示了如何实现这个接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public  class  MyActivityLifecycleCallbacks  implements  Application.ActivityLifecycleCallbacks { 
     private  int  foregroundActivities;
     private  boolean  hasSeenFirstActivity;
     private  boolean  isChangingConfiguration;
     @Override 
public  void  onActivityCreated(Activity activity, Bundle savedInstanceState) {
     }
  
     @Override
  public  void  onActivityStarted(Activity activity) {
         mForegroundActivities++;
         if  (hasSeenFirstActivity && foregroundActivities ==  1  && !isChangingConfiguration) {
             applicationDidEnterForeground(activity);
         }
         hasSeenFirstActivity =  true ;
         isChangingConfiguration =  false ;
     }
     @Override 
public  void  onActivityResumed(Activity activity) {
     }
  
     @Override
  public  void  onActivityPaused(Activity activity) {
     }
  
     @Override 
public  void  onActivityStopped(Activity activity) {
         foregroundActivities--;
         if  (foregroundActivities ==  0 ) {
             applicationDidEnterBackground(activity);
         }
         isChangingConfiguration = activity.isChangingConfigurations();
     }
  
     @Override
  public  void  onActivitySaveInstanceState(Activity activity, Bundle outState) {
     }
  
     @Override
  public  void  onActivityDestroyed(Activity activity) {
     }
  }

实现了自己的类之后,就可以调用Application的registerActivityLifecycleCallback方法,将我们的类MyActivityLifecycleCallbacks注册进去,这样就可以实现对Activity生命周期的监听了。

目录
相关文章
|
27天前
|
Linux Shell 网络安全
【Azure 应用服务】如何来检查App Service上证书的完整性以及在实例中如何查找证书是否存在呢?
【Azure 应用服务】如何来检查App Service上证书的完整性以及在实例中如何查找证书是否存在呢?
|
10月前
mpvue踩坑-未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译
mpvue踩坑-未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译
59 0
|
27天前
|
Python
【Azure 应用服务】App Service的运行状况检查功能失效,一直提示"实例运行不正常"
【Azure 应用服务】App Service的运行状况检查功能失效,一直提示"实例运行不正常"
|
26天前
|
安全 网络安全 Windows
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
|
3月前
|
安全 网络安全 Windows
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
在访问App Service的KUDU工具或使用`az webapp deploy`时遇到SSL错误:`SSL: CERTIFICATE_VERIFY_FAILED`。解决方法是临时禁用Azure CLI的SSL验证。在PowerShell中,设置`$env:ADAL_PYTHON_SSL_NO_VERIFY`和`$env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION`为1;在Windows命令提示符中,使用`set AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1`。注意,这可能引入安全风险,应仅在必要时使用。
|
4月前
|
Android开发 网络架构
【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)
【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)
737 1
|
10月前
|
监控 安全 BI
智慧工地云平台,功能包括:项目管理、企业管理、人员管理、监督检查、工程报监、环境监测、劳务实名制、统计报表、政策法规、视频监控、环境监测、APP应用
智慧工地平台是一种智慧型、系统性的工地信息化解决方案,它把现代信息技术融入到建设工程管理中,协调各方资源,优化施工过程,有效提升工程管理水平,实现智慧工程施工。功能模块: GIS地图首页、项目管理、企业管理、人员管理、监督检查、工程报监、环境监测、劳务实名制、统计报表、政策法规、视频监控、环境监测、APP应用管理等。
|
存储 XML Java
Android 天气APP(二十六)增加自动更新(检查版本、通知栏下载、自动安装)
Android 天气APP(二十六)增加自动更新(检查版本、通知栏下载、自动安装)
190 0
Android 天气APP(二十六)增加自动更新(检查版本、通知栏下载、自动安装)
|
数据可视化 IDE Java
Flutter框架在项目中使用App Manifest检查用户界面以及配置混乱之后对于构建配置的方案【Flutter】
Flutter框架在项目中使用App Manifest检查用户界面以及配置混乱之后对于构建配置的方案【Flutter】
|
存储 XML 缓存
使用APICloud AVM多端框架开发消防检查助手App项目实践分享
使用APICloud AVM多端框架开发消防检查助手App,把消防检查过程中,需要手写填报的文档,在App端以表单填写进行实现。同时可以添加手写签名,关联照片,而且App端表单填报很多项目进行下拉选择,极大的提高了工作效率;表单填报完成之后可通过系统后台生成word模板文件,App端下载到手机,通过手机连接打印机,可把纸质文件进行打印。
234 0

热门文章

最新文章