zoukankan      html  css  js  c++  java
  • Aactivity和Service之间的通信

    一、在activity中定义三个按钮 一个开启服务  一个关闭服务,还有一个是向服务发送广播

    当创建出Serevice时先执行Service的onCreate()创建服务后只执行一次 以后每次点击开启服务都不会再执行onCreate()而是去执行onStartCommand()停止服务时执行Service的onDestroy()

     二、在Activity中点击发送广播键会向服务发送广播(本例采用LocalBroadcastManager发送和接受广播)服务接收广播吐司出“接收到activity的广播”。服务是在oncreate()里边创建接受者不在onStartcommand()里边创建是因为每次点击开启服务时都会执行onStartcommand()    activity创建出service时在service中的oncreate()里向activity发送广播   activity在oncreate()里创建出接受者。

    三、其实就是双方都有一个发送者和接收者

    看代码

     1 package com.qf.service01;
     2 
     3 import android.app.Activity;
     4 import android.content.BroadcastReceiver;
     5 import android.content.Context;
     6 import android.content.Intent;
     7 import android.content.IntentFilter;
     8 import android.os.Bundle;
     9 import android.support.v4.content.LocalBroadcastManager;
    10 import android.view.View;
    11 import android.widget.Toast;
    12 
    13 public class MainActivity extends Activity {
    14 
    15     Intent serviceIntent;
    16     MyReceiver myReceiver;
    17     LocalBroadcastManager localBroadcastMgr;//本地广播管理器
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         super.onCreate(savedInstanceState);
    21         setContentView(R.layout.activity_main);
    22         
    23         serviceIntent=new Intent(getApplicationContext(),MyService.class);
    24         localBroadcastMgr=LocalBroadcastManager.getInstance(getApplicationContext());
    25         myReceiver=new MyReceiver();
    26         localBroadcastMgr.registerReceiver(myReceiver, new IntentFilter("com.qf.broadcast.disen_service"));
    27     }
    28     
    29     
    30     class MyReceiver extends BroadcastReceiver{
    31         @Override
    32         public void onReceive(Context context, Intent intent) {
    33             Toast.makeText(MainActivity.this, "收到service的广播", Toast.LENGTH_SHORT).show();
    34             
    35         }
    36     }
    37 
    38     public void start(View v) {
    39         startService(serviceIntent);
    40     }
    41 
    42     public void stop(View v) {
    43         stopService(serviceIntent);
    44     }
    45     public void startService(View v) {
    46         localBroadcastMgr=LocalBroadcastManager.getInstance(getApplicationContext());
    47         Intent intent1=new Intent("com.qf.broadcast.activity");
    48 
    49         localBroadcastMgr.sendBroadcast(intent1);
    50     }
    51 
    52 
    53     @Override
    54     protected void onDestroy() {
    55         super.onDestroy();
    56         
    57         //取消注册本地广播接收器
    58         localBroadcastMgr.unregisterReceiver(myReceiver);
    59     }
    60 }
    MainActivity.java
     1 package com.qf.service01;
     2 
     3 import android.app.Service;
     4 import android.content.BroadcastReceiver;
     5 import android.content.Context;
     6 import android.content.Intent;
     7 import android.content.IntentFilter;
     8 import android.os.IBinder;
     9 import android.support.v4.content.LocalBroadcastManager;
    10 import android.util.Log;
    11 import android.widget.Toast;
    12 
    13 public class MyService extends Service {
    14 
    15     LocalBroadcastManager localBroadcastMgr;//本地广播管理器
    16     MyReceiver myReceiver;
    17     public void onCreate() { //只执行一次,用于初始化Service
    18         super.onCreate();
    19         Log.i("debug", "onCreate");
    20         
    21         myReceiver=new MyReceiver();
    22         localBroadcastMgr=LocalBroadcastManager.getInstance(getApplicationContext());
    23         localBroadcastMgr.registerReceiver(myReceiver, new IntentFilter("com.qf.broadcast.activity"));
    24     }
    25     class MyReceiver extends BroadcastReceiver{
    26         @Override
    27         public void onReceive(Context context, Intent intent) {
    28             Toast.makeText(context, "收到activity的广播", Toast.LENGTH_SHORT).show();
    29             
    30         }
    31     }
    32     
    33     @Override
    34     public int onStartCommand(Intent intent, int flags, int startId) {
    35         // TODO 每次启动Service都会执行的方法,在此实现核心的功能
    36         Log.i("debug", "onStartCommand");        
    37     
    38          Intent intent1=new Intent("com.qf.broadcast.disen_service");
    39         localBroadcastMgr.sendBroadcast(intent1);    
    40         
    41         return super.onStartCommand(intent, flags, startId);
    42     }
    43     
    44     
    45     
    46     @Override
    47     public IBinder onBind(Intent intent) {
    48         return null;
    49     }
    50     
    51     @Override
    52     public void onDestroy() { //只执行一次,用于销毁Service组件
    53         super.onDestroy();
    54         Log.i("debug", "onDestroy");
    55         localBroadcastMgr.unregisterReceiver(myReceiver);
    56     }
    57 
    58 }
    Service.java
     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context=".MainActivity" >
    10 
    11     <Button
    12         android:id="@+id/btn1Id"
    13         android:layout_width="wrap_content"
    14         android:layout_height="wrap_content"
    15         android:onClick="start"
    16         android:text="启动服务" />
    17     
    18     <Button
    19         android:id="@+id/btn2Id"
    20         android:layout_width="wrap_content"
    21         android:layout_height="wrap_content"
    22         android:onClick="stop"
    23         android:text="停止服务" 
    24         android:layout_below="@id/btn1Id"/>
    25     <Button
    26         android:id="@+id/btn3Id"
    27         android:layout_width="wrap_content"
    28         android:layout_height="wrap_content"
    29         android:onClick="startService"
    30         android:layout_below="@id/btn2Id"
    31         android:text="向服务发广播" />
    32 
    33 </RelativeLayout>
    activity_main.xml
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.qf.service01"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="8"
     9         android:targetSdkVersion="17" />
    10 
    11     <application
    12         android:allowBackup="true"
    13         android:icon="@drawable/ic_launcher"
    14         android:label="@string/app_name"
    15         android:theme="@style/AppTheme" >
    16         <activity
    17             android:name="com.qf.service01.MainActivity"
    18             android:label="@string/app_name" >
    19             <intent-filter>
    20                 <action android:name="android.intent.action.MAIN" />
    21 
    22                 <category android:name="android.intent.category.LAUNCHER" />
    23             </intent-filter>
    24         </activity>
    25         
    26         <!-- 注册Service组件 -->
    27        <service android:name="com.qf.service01.MyService"/>
    28     </application>
    29 
    30 </manifest>
    AndroidManifest.xml
  • 相关阅读:
    Asp.Net构架(Http请求处理流程)、(Http Handler 介绍)、(HttpModule 介绍)
    JQuery中的事件(三)
    关于asp.net mvc中的httpModules 与 httpHandler
    jQuery中的CSS(二)
    JQuery选择器(一)
    JavaScript中利用Ajax 实现客户端与服务器端通信(九)
    JavaScriptDom操作与高级应用(八)
    oracle(二)V$lock 视图中ID1 , ID2 列的含义
    关于static、内部类
    oracle(一)复习起航
  • 原文地址:https://www.cnblogs.com/bimingcong/p/4820386.html
Copyright © 2011-2022 走看看