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中的控件

android开发之路03

如何在Fragment中使用Actionbar-Android开发问答

Android开发中 在Activity中 如何实时监听 Service 中某个变量的变化?

android开发中service如何接收activity用intent发送来的数据