应用场景:
非常多啦,只要你这个控件会根据Service的运行状态改变内容,比如你一个按钮原始状态是“点击下载”,点击后显示“正在下载”,你不可能看着它下载吧,你得去其他Activity逛逛,逛完回来下载依然没有完成控件还应该显示”正在下载”,可现实是控件成了初始状态“点击下载”
解决思路(不是存SP):
控件的显示状态和Service的运行状态绑定,Service在运行说明正在下载就显示”正在下载”,不在运行说明下载完成或者被系统干掉了就显示”点击下载”
代码逻辑:
获取系统现在正在运行得所有服务,看看有没有我们的服务在运行,然后做相应UI初始化
/**
* 判断某个服务是否正在运行
* @param context
* @param servierName 服务的名称(该服务类的完整路径)
* @return 是否运行
*/
public **static** boolean serviceRunning(Context context, String servierName) {
ActivityManager mAMangager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
//获得服务集合,参数:服务个数
List<ActivityManager.RunningServiceInfo> list = mAMangager.getRunningServices(100);
//遍历比对
for (ActivityManager.RunningServiceInfo info : list) {
String currentService = info.service.getClassName();
if (servierName.equals(currentService)) {
//存在
return true;
}
}
return false;
}
调用:
比如我的服务类是service包下MyService
if(serviceRunning(上下文,"com.ycc.service.MyService")){
控件.setText("正在下载");
}else{
控件.setText("点击下载");
}
上面说的只是界面初始化哟,如果你要在下载完成后显示”下载完成”那就在下载完成后发消息给Handler,在那儿更新UI吧
和Service没有关系的控件,可以把控件的状态存到SharedPreferences偏好设置里,根据里面的值初始化控件