android-service的简单用法

service是android开发中的四大组件之一,下面来介绍service的简单用法

1.需要新建一个service类,该类继承与service接口,需要实现onBind方法,这个方法之后介绍

2.创建intent对象,设置intent的目标为新建的service的类,启动service的方法有两种用startservice方法和bindservice方法

  两种方法的不同在于startservice在启动服务之后,关闭当前的activity之后service还在系统后台运行

  bindservice启动服务后将服务与主界面绑定,主界面关闭之后service也就结束了

3.主界面与service的信息交互需要用到aidl,需要在项目src下新建aidl包,并新建接口,会自动在gen目录下生成对应的java文件,这些东西都是不用进行修改的.

另外,一定记得在androiManifest中注册service

package com.wentjiang.shixi_service;

import com.wentjiang.shixi_service.aidl.MyInterface;

import android.R.string;
import android.app.Activity;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
    private Button mStartService,mStopService,mBindService,mUnbindService,mAidl;
    private TextView mTextView;
    private ServiceConnection mConn;
    private MyReceiver myreceiver;
    private MyInterface mInterface;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        initView();
    }

    private void initView() {
        mStartService=(Button) findViewById(R.id.startService);
        mStopService=(Button) findViewById(R.id.stopService);
        mBindService=(Button) findViewById(R.id.bindService);
        mUnbindService=(Button) findViewById(R.id.unbindService);
        mAidl=(Button) findViewById(R.id.aidl);
        mTextView=(TextView) findViewById(R.id.text);
        mStartService.setOnClickListener(this);
        mStopService.setOnClickListener(this);
        mBindService.setOnClickListener(this);
        mUnbindService.setOnClickListener(this);
        mAidl.setOnClickListener(this);

    }

    private void initData() {
        mConn=new ServiceConnection() {

            @Override
            public void onServiceDisconnected(ComponentName name) {
                //连接失败时调用的方法

            }

            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                //连接成功是调用的方法
                Log.i("连接成功了", "---");
                mInterface=MyInterface.Stub.asInterface(service);
            }
        };
        myreceiver=new MyReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction("action.went");

        registerReceiver(myreceiver, filter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        Intent intent =new Intent(this, MyService.class);
        switch (v.getId()) {
        case R.id.startService:
            startService(intent);
            break;
        case R.id.stopService:
            stopService(intent);
            break;
        case R.id.bindService:
            bindService(intent, mConn, Service.BIND_AUTO_CREATE);
            break;
        case R.id.unbindService:
            unbindService(mConn);
            break;
        case R.id.aidl:
            try {
                int num= mInterface.getmul(10, 6);
                mTextView.setText(String.valueOf(num));
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        default:
            break;
        }
    }

    public class MyReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if("action.went".equals(action)){
                int num=intent.getIntExtra("num", 0);
                mTextView.setText(String.valueOf(num));
            }
        }

    }
}

MainActivity

package com.wentjiang.shixi_service;

import java.util.Timer;
import java.util.TimerTask;

import com.wentjiang.shixi_service.MainActivity.MyReceiver;
import com.wentjiang.shixi_service.aidl.MyInterface;

import android.R.integer;
import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;

public class MyService extends Service {
    private MyReceiver mReceiver;
    private MyInterface.Stub mBinder = new MyInterface.Stub() {

        @Override
        public int getmul(int num1, int num2) throws RemoteException {
            int temp=num1*num2;
            return temp;
        }
    };

    @Override
    public IBinder onBind(Intent intent) {
        Log.i("onbind被调用了", "----");
        return mBinder;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i("oncreate被调用了", "----");
    }

    @Override
    public void onDestroy() {
        Log.i("onDestroy被调用了", "---");
        super.onDestroy();
    }

    @Override
    public void onRebind(Intent intent) {
        Log.i("onRebind", "---");
        super.onRebind(intent);
    }

}

MyService

package com.wang.service.aidl;

interface MyInterface{

    int mul(int a, int b);

}

MyInterface

<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:background="#ffffff"
    android:orientation="vertical"
    android:padding="20dp" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Test"
        android:textColor="#000000"
        android:textSize="24sp" />

    <Button
        android:id="@+id/btn01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Start Service" />

    <Button
        android:id="@+id/btn02"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Stop Service" />

    <Button
        android:id="@+id/btn03"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="bind Service" />

    <Button
        android:id="@+id/btn04"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="unbind Service" />

    <Button
        android:id="@+id/btn05"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="work" />

</LinearLayout>

activity_main

时间: 2024-09-27 01:39:12

android-service的简单用法的相关文章

【android】Socket简单用法

原文地址:http://www.cnblogs.com/harrisonpc/archive/2011/03/31/2001565.html Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示.值得一提的是,Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端.这是两个封装得非常好的类,使用起来很方便! 下面将首先创建一个SocketServer的类作为服务端如下,该服务端实现

关于Android Service的基本用法(上)(转)

相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了. Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色.它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长 期运行的任务.必要的时候我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态. 不过,虽然Service几 乎被每一个Android程序员所熟知,但并不是每个人都已经将Service的各个知识点都

关于Android Service的基本用法(下)(转)

在上篇文章中我们知道了,Service其实是运行在主线程里的,如果直接在Service中处理一些耗时的逻辑,就会导致程序ANR. 让我们来做个实验验证一下吧,修改上一篇文章中创建的ServiceTest项目,在MyService的onCreate()方法中让线程睡眠60秒,如下所示: [java] view plaincopy public class MyService extends Service { ...... @Override public void onCreate() { su

Android Service使用简单介绍

作为一个android初学者,经常对service的使用感到困惑.今天结合Google API 对Service这四大组件之一,进行简单使用说明. 希望对和我一样的初学者有帮助,如有不对的地方,也希望及时指出. Service :就是长时间运行在后台,没有用户界面的一个应用组件.即便,用户切换到其他的应用,Service依然可以在后台运行. 除此之外,一个组件可以将自己和Service进行绑定,甚至是进程间通信.例如,Service可以处理网络请求,播放音乐, 处理I/O操作,和Content

Android中Xfermode简单用法

首先在写这篇博客的时候,需要说明我是参考了那篇博文给我的灵感: 详解Paint的setXfermode(Xfermode xfermode) 其次呢,在写这篇博文的时候呢也避免不了抱怨啊.网上其他的关于Xfermode介绍的大部分都是google官方文档中属性的含义,都很雷同估计都是翻译过来的 我想说的是就不能有点原创吗? so,我决定写这篇文章: 一是抒发我心中的纠结: 二是抒发这么多天下文章一大抄就是没有自己出的文章: 三是抄就抄吧,也要加入自己的感悟把: 四是记录一下,以免以后忘记: 另外

android datepicker timepicker简单用法

1.效果图 2. xml布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent&

android AsyncTask的简单用法

public class WeatherAsyncTask extends AsyncTask<String, Integer, String> { public TextView t1=null; public WeatherAsyncTask(TextView t) { t1=t; } @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub return

浅谈 Android Service

 浅谈Android Service的基本用法: 关于Service最基本的用法自然是启动和停止操作. 启动Service有两种方式: 1.通过startService(Intent intent)方式启动,启动时会自动执行onCreate(),onStartCommand()方法. 2.通过bindService(Intent intent,ServiceConnection connection,int flag) 第一个参数是一个Intent对象,第二个参数是连接Service的实例,

Android WIFI 简单用法

随着Wifi的普及,在开发App的时候对wifi的考虑越来越多了.例如程序的升级在wifi下可以省很多流量,在通信软件中的视频通话.可以实现高画质的传输等等,Android提供了WifiManager类来帮助开发者们管理Wifi.下面就简单来说一下WifiManager的简单用法把. 权限: 为了使用WfiManager 我们需要在Androidmanifest.xml 加入权限: //本例中使用了前两个.具体请按照需要添加权限. <uses-permission android:name=&quo