Android自学之路——Service与Activity通信

A)MainActivity 类的代码 1 package com.example.cms.service;
 2
 3 import android.app.Service;
 4 import android.content.ComponentName;
 5 import android.content.Intent;
 6 import android.content.ServiceConnection;
 7 import android.os.IBinder;
 8 import android.support.v7.app.AppCompatActivity;
 9 import android.os.Bundle;
10 import android.view.View;
11 import android.widget.Button;
12 import android.widget.Toast;
13
14 public class MainActivity extends AppCompatActivity {
15     private Button bind,unBind,getServiceStatus;
16     BindService.MyBinder binder;
17     private ServiceConnection conn=new ServiceConnection() {
18         @Override
19         public void onServiceConnected(ComponentName name, IBinder service) {//service为Service中的onBinder()方法返回的
20             System.out.println("----Service Connected-----");
21             binder= (BindService.MyBinder) service;
22         }
23         @Override
24         public void onServiceDisconnected(ComponentName name) {
25             System.out.println("----Service Disconnted----");
26         }
27     };
28
29     @Override
30     protected void onCreate(Bundle savedInstanceState) {
31         super.onCreate(savedInstanceState);
32         setContentView(R.layout.activity_main);
33         bind= (Button) findViewById(R.id.bind);
34         unBind= (Button) findViewById(R.id.unBind);
35         getServiceStatus= (Button) findViewById(R.id.getServiceStatus);
36         final Intent intent=new Intent(this,BindService.class);
37         bind.setOnClickListener(new View.OnClickListener() {
38             @Override
39             public void onClick(View v) {
40                 //绑定指定Service
41                 bindService(intent,conn, Service.BIND_AUTO_CREATE);
42             }
43         });
44         unBind.setOnClickListener(new View.OnClickListener() {
45             @Override
46             public void onClick(View v) {
47                 //接触绑定
48                 unbindService(conn);
49             }
50         });
51         getServiceStatus.setOnClickListener(new View.OnClickListener() {
52             @Override
53             public void onClick(View v) {
54                 Toast.makeText(MainActivity.this,"Service 的 count值为:"+binder.getCount(),Toast.LENGTH_SHORT).show();
55             }
56         });
57     }
58
59 }

B)Service类代码
package com.example.cms.service;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;

/**
 * Created by CMS on 2016/3/28.
 */
public class BindService extends Service {
    private int count;
    private boolean quit=false;
    private MyBinder binder=new MyBinder();

    class MyBinder extends Binder{
        public int getCount(){
            return count;
        }
    }
    @Override
    public IBinder onBind(Intent intent) {
        System.out.print("Service is Binded");
        return binder;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        System.out.print("Service is Created");
        new Thread(){
            public void run(){
                while(!quit){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    count++;
                }
            }
        }.start();
    }
    @Override
    public boolean onUnbind(Intent intent) {
        System.out.println("Service is Unbinded");
        return true;
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        this.quit=true;
        System.out.println("Service id Destroyed");
    }
}
时间: 2024-08-07 08:38:53

Android自学之路——Service与Activity通信的相关文章

Android自学之路——Service与IntentService

A)MainActivity部分的代码1 package com.example.cms.intentservice; 2 3 import android.content.Intent; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.Button; 8 9 public class

Service与Activity通信与AIDL

出差深圳一个月,终于回来了,一个月里干了不少,这些天里会慢慢总结一点东西出来,今天说的是关于Service的一点事:通信.通信的做法比较固定,基本上按照模板来写就可以实现. 1.Service与Activity通信 Activity通过startService()方法启动Service之后,Service将独立于Activity运行(虽然仍然是同一个进程),Activity无法指导Service如何运行.当Activity需要根据一些条件决定Service如何运行的时候,就需要有另外的方法了:将

.NET程序员的Android自学之路(一):Android开发环境的准备

写在前面的话:话说,笔者是一个.NET程序员,技术水平可能还不入流,这两三年一直在关注WP,可惜诺基亚"一蹶不振",没有迎来WP的时代,现在只好投入Android阵营.其实也就是今天笔者刚开始学习Android的,计划将学习的过程记录下来,一是方便自己回顾,二是分享于有需要的人,闲话少提,开始今天的内容. 一.开发环境下载Java环境JDK:Oracle官网下载地址JDK7Android环境SDK:http://developer.android.com/sdk/index.html,

(Android数据传递)Service和Activity之间-- 借助BroadcastReceiver--的数据传递

实现逻辑如下: 左侧为Activity中的执行逻辑,右侧为Service中的执行逻辑: /** * <功能描述> Service和Activity之间的数据交互:具体表现为: 1. 从Service获取数据源,传递到Activity中: 2. * 在Activity中作数据更新: 3. Service中的onCreate()在UI线程中执行,作延时需要在子线程中执行: * * @author Administrator */ public class MainActivity extends

Android开发学习之路-该怎么学Android(Service和Activity通信为例)

在大部分地方,比如书本或者学校和培训机构,教学Android的方式都基本类似,就是告诉先上原理方法,然后对着代码讲一下. 但是,这往往不是一个很好的方法,为什么? ① 学生要掌握这个方法的用途,只能通过记忆而不是理解 ② 当某些原理稍微复杂的时候,通过讲解是不能直接理解的,有时候下课回去了再看也不一定看得明白 ③ 对英语文档不够重视,有问题先百度 本鸟自学Android一年,慢慢也学习到了很多的方法,如果你也是一个入门不久但是觉得很多东西都不明白的新手,希望本文对你有帮助. 我觉得要想学好And

Android开发学习之路-Service和Activity的通信

在很多时候,Service都不仅仅需要在后台运行,还需要和Activity进行通信,或者接受Activity的指挥,如何来实现,来看代码. 定义一个服务 1 // 创建一个服务,然后在onBind()中返回内部类(继承自Binder)的实例,使得活动能获得该实例,并操作此服务 2 public class MyService extends Service { 3 4 // 创建一个内部类的实例,被活动获得后,操作服务 5 private mBinder binder = new mBinder

Android 学习之路 1:Activity之间传递数据的四种方式

传递数据 新建 Activity 在项目中右键,选择 New,继续选择中下方的 Activity,最后是 Blank Activity. 此时 Android Studio 会为我们自动添加一个对应的布局文件,为布局文件中的 TextView 添加 ID,以便后续使用. 用Intent 发送数据 在主布局文件中新建一个 Button 控件,并在主类中定义它,然后为它设置 Click 的监听事件. Button button; @Override protected void onCreate(B

Android自学之路--ContentProvider

A)MainActivity部分的代码1 package com.example.cms.systemcontentprovider; 2 3 import android.app.ExpandableListActivity; 4 import android.content.ContentUris; 5 import android.content.ContentValues; 6 import android.database.Cursor; 7 import android.net.Ur

Android自动化测试之路——Service

对Service进行测试,首先你得熟悉service的两种生命周期,即onCreate——onBind 和onCreate——onStartCommand. 启动服务的方式分别是startService()和bindService(). 创建测试类需要继承ServiceTestCase这个类,默认初始化会设定mock Context和mock Application,已达到与被测对象的独立,实现单元测试的目的. 需要说明下的是ServiceTestCase.bindService()和Servi