zoukankan      html  css  js  c++  java
  • Android:Service通知Activity更新界面

    Android有四大组件,其中包括service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题。

    1.首先Activity调用Service

    这个是比较基础的,它有两种常见的方法;

    1. 通过Intent

    可以指定package name和class name的方式来调用,Intent.setClassName这个成员即可。通过putString来装载数据,startService(intent)即可例子如下:

    Intent regIntent = new Intent(“com.service”);
    regIntent.putExtra(“data”, "helloData");
    startService(regIntent);

    2.通过IPC

    IPC有点复杂,想要了解的可以去查有关IBinder的一些资料。

    2.Service将状态告诉Activity

    方法有两种

    1.service 通过广播的形式发送broadcast

    我们写一个broadcastReceiver即可,通常的情况,将broadcastReceiver写成Activity的内部类,这个onReceiver可以直接调用activity的方法来更新界面。但是内部类只能采用代码注册的方法registerReceiver(),不能再AndroidManifest.xml文件中进行静态的声明,因为内部类要依赖于外部类而存在的。如果你一定要用AndroidManifest来注册receiver,那么只能把broadcastReceiver写成单独的文件的public类。这时候,你想更新界面就比较麻烦了,你只能自己把你要更新的activity运行起来,然后再向这个activity的内部类发广播的消息来更新界面

    2.service直接向activity发intent

    在service里面进行startActivity是属于在Activity外startActivity即在task外启动activity,因此,必须在intent加入一个参数如下:

    Intent intentSend = new Intent(Constants.ACTION_STATUS);
    
    intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
    intent1.putExtra(“statues“,“end“);
    
    context.startActivity(intent1);

    但是此时会引发的一个问题是,多次startActivity会导致很多的activity实现被运行,这肯定不是我们要的,我只要一个Activity就可,此时,我们要在androidManifest里面对这个activity的launchMode设置为singleInstance

    <activity android:name="com.demo.Activity"
    android:label="@string/online" android:launchMode="singleInstance">

    记住啦,有人设置为singleTask,也可以,但他们有一点区别。

    同时记住要更新intent,这样getInstent才可以得到每次的新实例

    @Override
    
    protected void onNewIntent (Intent intent){
    
        setIntent(intent);
    
    }
  • 相关阅读:
    P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
    Luogu P1447 [NOI2010]能量采集 数论??欧拉
    Luogu P2522 [HAOI2011]Problem b 莫比乌斯反演
    Luogu P2257 YY的GCD 莫比乌斯反演
    [笔记] 数论函数小记
    [笔记] 线性筛小记
    Luogu P1092 虫食算 爆搜
    Luogu P1066 2^k进制数 组合数学
    Luogu P1641 [SCOI2010]生成字符串 组合数学
    Luogu P2532 [AHOI2012]树屋阶梯 卡特兰数
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9008004.html
Copyright © 2011-2022 走看看