Android——Service装取数据

在Service里面装数据,从Activity里面用serviceConnection取数据

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.chenshuai.myapplication.ActivityService"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="测试普通服务"
        android:textSize="30sp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="一般启动服务"
            android:onClick="yibanqdonclick"/>
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="一般停止服务"
            android:onClick="yibantzonclick" />
    </LinearLayout>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="测试绑定服务"
        android:textSize="30sp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="绑定启动服务"
            android:onClick="bangdingqdonclick"/>

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="读取服务"
            android:onClick="duqusjonclick"/>
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="绑定停止服务"
            android:onClick="bangdingtzonclick" />
    </LinearLayout>

</LinearLayout>

Service

package com.example.chenshuai.myapplication;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

public class MyService_1 extends Service {
    public MyService_1() {

        //构造方法里测试
        Log.e("TAG","构造Service");
    }

    int i = 0;

    Boolean aBoolean = true;
    //自定义类,继承Binder,装数据
    public class Mybinder extends Binder
    {
        public int getText()
        {
            return i;
        }
    }

    //绑定的回调方法
    //必须要重写
    @Override
    public IBinder onBind(Intent intent) {
        //绑定方法
        // TODO: Return the communication channel to the service.
       // throw new UnsupportedOperationException("Not yet implemented");
        Log.e("TAG","绑定并调用");
        //return  new Binder();

        //启动子线程,改变i的值
        new Thread()
        {
            public void run()
            {
                while (aBoolean)
                {
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    i++;
                }
            }
        }.start();

        return new Mybinder();
    }

    @Override
    public void onCreate() {

        //创建方法
        Log.e("TAG","创建Service");
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        //销毁方法
        Log.e("TAG","销毁Service");
        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        //
        Log.e("TAG","启动命令Command");
        return super.onStartCommand(intent, flags, startId);
    }
    //解绑时候调用

    @Override
    public boolean onUnbind(Intent intent) {

        Log.e("TAG","解除绑定");

        //停止循环
        aBoolean = false;
        return super.onUnbind(intent);
    }
}

java

package com.example.chenshuai.myapplication;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class ActivityService extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity_service);
    }

    //普通方式启动Service
    //参考Activity的启动方式
    public void yibanqdonclick(View view)
    {
        //通过意图
        //显示意图
        Intent intent = new Intent(this,MyService_1.class);
        startService(intent);

        Toast.makeText(ActivityService.this, "启动Service", Toast.LENGTH_SHORT).show();
    }
    public void yibantzonclick(View view)
    {
        //通过意图
        //显示意图
        Intent intent = new Intent(this,MyService_1.class);
        stopService(intent);

        Toast.makeText(ActivityService.this, "启动Service", Toast.LENGTH_SHORT).show();
    }
    ServiceConnection serviceConnection;

    MyService_1.Mybinder mybinder;

    public void bangdingqdonclick(View view)
    {
        Intent intent = new Intent(this,MyService_1.class);

        //实现ServiceConnection接口
        if (serviceConnection == null) {
            serviceConnection = new ServiceConnection() {
                @Override
                public void onServiceConnected(ComponentName name, IBinder service) {

                    Log.e("TAG", "连接服务");

                    //接收数据 Mybinder
                    mybinder = (MyService_1.Mybinder)service;

                }

                //异常断开才会调用
                @Override
                public void onServiceDisconnected(ComponentName name) {

                    Log.e("TAG", "断开连接");

                }
            };
        }
        //参数:意图,连接,连接方式 BIND_AUTO_CREATE自动创建
        bindService(intent,serviceConnection, Context.BIND_AUTO_CREATE);

        Toast.makeText(ActivityService.this, "连接服务成功", Toast.LENGTH_SHORT).show();
    }

    public void bangdingtzonclick(View view)
    {
        //判断是否已经绑定,连接是否为空
        if (serviceConnection != null)
        {
            //解除绑定
            unbindService(serviceConnection);

            serviceConnection = null;

            Toast.makeText(ActivityService.this, "解除绑定", Toast.LENGTH_SHORT).show();
        }
        else
        {
            Toast.makeText(ActivityService.this, "尚未绑定", Toast.LENGTH_SHORT).show();
        }
    }

    //读取服务数据
    public void duqusjonclick(View view)
    {
       //调用服务对象的方法
        if (mybinder != null)
        {
            Toast.makeText(ActivityService.this, "读取的信息是:"+mybinder.getText(), Toast.LENGTH_SHORT).show();
        }

    }

    //重写回调方法,防止强制退出时,绑定服务还在运行
    @Override
    protected void onDestroy() {

        if (serviceConnection != null) {
            //解除绑定
            unbindService(serviceConnection);

            serviceConnection = null;
        }
        super.onDestroy();
    }
}
时间: 2024-10-21 14:15:01

Android——Service装取数据的相关文章

Android MaoZhuaWeiBo开发Service抓取个人信息-2

前面把主要的东西讲完了,之后就是数据的获取和解析显示出来了,那接下来我们就负责抓取数据的这块吧,首先我们需要 在清单文件里加载服务和活动 添加:. <activity android:name="com.neweriweibo.activity.OAuthActivity"/> <activity android:name=".MainActivity"/> <activity android:name="com.neweri

王家林最受欢迎的一站式云计算大数据和移动互联网解决方案课程 V3之Android架构设计和实现完整训练:HAL&amp;Framework&amp;Native Service&amp;Android Service&amp;Best Practice

如何理解Android架构设计的初心并开发出搭载Android系统并且具备深度定制和软硬整合能力特色产品,是本课程解决的问题. 课程以Android的五大核心:HAL.Binder.Native Service.Android Service(并以AMS和WMS为例).View System为主轴,一次性彻底掌握Android的精髓. 之所以是开发Android产品的必修课,缘起于: 1,  HAL是Android Framework&Application与底层硬件整合的关键技术和必修技术:

Android中Service通信(一)——启动Service并传递数据

启动Service并传递数据的小实例(通过外界与服务进行通信): 1.activity_main.xml: <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:text="默认信息" android:id="@+id/etData"/> <Button android:text=&

android 怎样用AIDL Service 传递复杂数据

大家都知道在Android中通过AIDL可以跨进程调用Service中的数据,网上也有很多实例,但是大部分实例都是关于基本数据类型的远程调用,很少讲到复杂数据的调用,今天我用一个例子来演示一下怎样用AIDL Service 传递复杂数据. 我们分2步开始: 第一步:部署我们的服务端,也就是Service端: 1:在Service端我先自定义2个类型:Person和Pet.因为我们需要跨进程传递Person对象和Pet对象,所以Person类和Pet类都必须实现Parcelable接口,并要求在实

Android service进程保护

应用进程保活基本就是围绕两个方面来展开: 1 尽量保证进程不被杀死. 2 进程被杀死后复活.细分如下: 1)Service重启 2)进程守护 3)Receiver触发 4) AlarmManager or JobScheduler循环触发 5)与系统Service捆绑-–可以不考虑,了解即可 下面将围绕这几点展开讨论. 一,基本概念 1.什么才叫应用进程保活 应用进程保活可以理解为应用位于后台永远不能被杀死.这里的可以简略地分为两种情况,第一种是当系统资源紧俏的时候或者基于某种系统自身的后台运行

Android Service的全面解析

Service基本用法 基本用法即同进程下Activity与Service双向通信,先描述整体实现过程然后直接上代码: 新建一个继承自Service的类MyService,然后在AndroidManifest.xml里注册这个Service Activity里面使用bindService方式启动MyService,也就是绑定了MyService(到这里实现了绑定,Activity与Service通信的话继续下面的步骤) 新建一个继承自Binder的类MyBinder 在MyService里实例化

Android Service完全解析,关于服务你所需知道的一切(上)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色.它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务.必要的时候我们甚至可以在程序退出的情况下,让Service在后台继续保持

android蓝牙(二)——接收数据

在蓝牙开发中,我们有这样的一个需求:我们的android客户端要始终保持和蓝牙的连接,当蓝牙有数据返回的时候,android客户端就要及时的收取数据,当蓝牙没有数据返回的时候我们就要保持android客户端和蓝牙之间的连接.这个时候我们就要采取socket来实现和蓝牙之间的连接.做项目使用过http轮询去获取数据,但是发现那样总是有一定的弊端.于是就才用了socket方式去获取数据. 实现步骤:1.启动一个service去监听是否有数据返回.一旦有数据返回就启动一个线程去处理数据 2.处理完数据

Android Service完全解析,关于服务你所需知道的一切(下)

转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要内容,包括Service的基本用法.Service和Activity进行通信.Service的销毁方式.Service与Thread的关系.以及如何创建前台Service.以上所提到的这些知识点,基本上涵盖了大部分日常开发工作当中可能使用到的Service技术.不过关于Service其实还有一个更加