zoukankan      html  css  js  c++  java
  • Service Receiver Activity 之间的通信

    一.Activity与Service

    1. 通过Intent,例子如下: 

            Intent intent = new Intent(this, Myservice.class); 
    //      intent .putExtra(name, value) 
            startService(intent); 

    2. service直接向activity发intent。在service里面进行startActivity是属于在Activity外startActivity即在task外启动activity,因此,必须在intent

    加入一个参数如下:

    intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    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);
    
    }

    二.Receiver与Activity

      1. 通常的情况,将broadcastReceiver写成Activity的内部类,这个onReceiver可以直接调用activity的方法来更新界面。但是内部类只能采用代

    码注册的方法registerReceiver(),不能再AndroidManifest.xml文件中进行静态的声明,因为内部类要依赖于外部类而存在的。

      2.如果你一定要用AndroidManifest来注册receiver,那么只能把broadcastReceiver写成单独的文件的public类。这时候,你想更新界面就比较麻

    烦了,你只能自己把你要更新的activity运行起来,然后再向这个activity的内部类发广播的来更新界面

    三。从service传过来的广播,不要启动activity

    Never start an Activity in response to an incoming broadcast Intent.

    http://developer.android.com/training/run-background-service/report-status.html

  • 相关阅读:
    软件架构的数据流总结(一)
    软件架构的控制流总结
    软件架构的控制流总结
    并行编程架构(指令流水、进程、线程、多核,Pipe and Filter)
    并行编程架构(指令流水、进程、线程、多核,Pipe and Filter)
    初窥深度学习
    初窥深度学习
    神经网络总结(初稿)
    神经网络总结(初稿)
    Survey of single-target visual tracking methods based on online learning 翻译
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3539737.html
Copyright © 2011-2022 走看看