Android开发中 在Activity中 如何实时监听 Service 中某个变量的变化?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发中 在Activity中 如何实时监听 Service 中某个变量的变化?相关的知识,希望对你有一定的参考价值。
举个例子你会理解的更快:X, Y两个listview,X里有1,2,3,4这4个item,Y里有a,b,c,d这4个item。如果你点了b这个item。如下:
public void onItemClick (AdapterView<?> parent, // parent相当于listview Y适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X - -、
View view, // view是你点b item的view的句柄,就是你可以用这个view,来获得b里的控件的id后操作控件
int position, // position是b在Y适配器里的位置(生成listview时,适配器一个一个的做item,然后把他们按顺序排好队,在放到listview里,意思就是这个b是第position号做好的)
long id // id是b在listview Y里的第几行的位置(很明显是第2行),大部分时候position和id的值是一样的,如果需要的话,你可以自己加个log把position和id都弄出来在logcat里瞅瞅,看了之后心里才踏实
)
参考技术A service里的变量变化了,可以发一个消息给主UI,消息里面带上数据,主UI再做出相应的动作。
强烈指责“杭翠波”,把我之前 回答别人的问题 的答案据为己有,然后贴在这追问
您好,用广播发信息给主UI,和用意图发消息。哪个更合适? 求教 谢谢
追答广播其实也是通过把东西装在inten里发送的。广播用起来比较麻烦,还得注册等等的工作,我是不愿意用,但是想捕获系统的广播(开机,电量等)还是必须用的。我上面说的是Handler和Message,这个用着比较简单方便在service里new一个message,把数据什么的装进去,发给主UI的Handler(这个Handler是主UI的成员,不用担心出现子线程操作主UI的问题),主UI接到消息,吧东西拿出来就OK了。
本回答被提问者采纳 参考技术B 可以通过观察者来监听变化,也可以主动通知 参考技术C service里的变量变化了,可以发一个消息给主ui,消息里面带上数据,主ui再做出相应的动作。广播其实也是通过把东西装在inten里发送的。广播用起来比较麻烦,还得注册等等的工作,我是不愿意用,但是想捕获系统的广播(开机,电量等)还是必须用的。我上面说的是Handler和Message,这个用着比较简单方便在service里new一个message,把数据什么的装进去,发给主UI的Handler(这个Handler是主UI的成员,不用担心出现子线程操作主UI的问题),主UI接到消息,吧东西拿出来就OK了。 参考技术D 要支持一下
如何判断Activity是否在前台显示
转载请备注原文地址: https://www.niwoxuexi.com/blog/android00/article/223.html
我们在Android开发过程中,经常会判断Activity是否在前台显示,来处理某些状态,这里谢了一个静态方法,供大家参考。
方法一:用ActivityManager管理的Activity栈来操作
public class CommonUtil{ /** * 判断某个Activity 界面是否在前台 * @param context * @param className 某个界面名称 * @return */ public static boolean isForeground(Context context, String className) { if (context == null || TextUtils.isEmpty(className)) { return false; } ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1); if (list != null && list.size() > 0) { ComponentName cpn = list.get(0).topActivity; if (className.equals(cpn.getClassName())) { return true; } } return false; } }
注意:在 AndroidManifest.xml 文件中添加权限,否则会报错
<uses-permission android:name="android.permission.GET_TASKS"/>
方法二、 在OnResume,和OnPause中记录一个变量
private bollean isFront = false; @Override public void onResume() { super.onResume(); isFront = true; } @Override public void onPause() { super.onPause(); isFront = false; }
本文出自 “全栈开发” 博客,请务必保留此出处http://andy2290.blog.51cto.com/13193207/1956023
以上是关于Android开发中 在Activity中 如何实时监听 Service 中某个变量的变化?的主要内容,如果未能解决你的问题,请参考以下文章
android开发问题:如何在当前Acitivity中用代码获取上一个Activity名称?
android开发中一个activity如何调用另一个xml中的控件
如何在Fragment中使用Actionbar-Android开发问答