android后台运行时弹出正在运行通知(类似QQ效果)

对于一些应用要求应用没有完全退出的情况下在后台运行时要弹出通知以方便用户进入软件。例如QQ就在退到后台的时候弹出正在运行的提示通知。

初步总结实现这种效果可以有一下三种方式:

1、可以监听onstop()方法。因为如果应用退到后台必然会执行onstop()方法,而在应用内间的跳转如果没有执行finish()的话页面通常只会执行onpause()方法,除非内存严重不足导致系统回收掉了后台页面。但由于应用内一些操作比如调用系统相机、图库等操作由于切换了程序(图库是系统程序)所以也会执行onstop()导致要加以过滤还有一些特殊操作难以把控所以实用性不强。但一般的需求是可以满足的。
2、可以监听home键和主页面(即你的activity任务栈的栈底activity也即程序的入口页面)监听back键。在监听事件中做相关的操作比如显示通知等操作。但是由于home键默认无法监听,只有页面时键盘类型的页面才能监听到home键所以必须更改页面的类型。如下:

01
02
03
04
public void onAttachedToWindow(){
this .getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super .onAttachedToWindow();
}



这样就会在一些页面出现问题因为这是页面的类型被更改了还有就是即使这样也不能保证所以手机和android版本都能监听到所以也有风险。常用机型可以android2.2可以监听。
3、通过启动后台服务实时监听系统进程栈的动态获取当前前台进程是否是自己应用的进程。该方式可靠但要启动服务,对于一个本没有必要启动后台服务的程序,这本来就是很纠结的事情。为了一个后台通知去开启一个服务也会让用户浮想联翩。下面是精华代码:
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
activityManager = (ActivityManager) this .getSystemService(Context.ACTIVITY_SERVICE); 
packageName = this .getPackageName(); 
System.out.println( "启动服务" );
new Thread() { 
public void run() { 
try
while (!isStop) { 
Thread.sleep( 1000 ); 
  
if (isAppOnForeground()) { 
Log.v(TAG, "前台运行" );
} else
Log.v(TAG, "后台运行" );
showNotification();
} catch (Exception e) { 
e.printStackTrace(); 
}.start();


判断是否在前台:
?
01
02
03
04
05
06
07
08
List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses(); 
if (appProcesses == null ) return false
  
for (RunningAppProcessInfo appProcess : appProcesses) { 
// The name of the process that this object is associated with. 
if (appProcess.processName.equals(packageName) 
&& appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
return true ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值