• Android Service 通知Activity更新界面的方法研究


    Android Service 通知Activity更新界面的方法研究

     

          Android的最重要的组件式service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题。当然今天我们不研究底层的实现问题,我从上层的应用的如何使用的角度进行研究。

    首先Activity调用Service

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

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

    Intent regIntent = new Intent(“com.service”);

    regIntent.putExtra(“data”, "helloData");

    startService(regIntent);

    第二, 通过IPC,这个比较麻烦,一般用不着,这里不谈

    但是,反过来,Service如何将一些状态告诉Activity呢?方法有两种

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

    第二、 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);

    }

  • 相关阅读:
    JavaScript中的方法和属性
    vue的计算属性与方法的不同
    vue 中使用 watch 出现了如下的报错
    vue中methods函数调用methods函数写法
    ES2015箭头函数与普通函数对比理解
    leetcode Single Number python
    leetcode first bad version python
    leetcode Search for a Range python
    leetcode Longest Valid Parentheses python
    python dict traversal
  • 原文地址:https://www.cnblogs.com/zmc/p/3545224.html
Copyright © 2020-2023  润新知