zoukankan      html  css  js  c++  java
  • 绑定方式开始服务&调用服务的方法

    1、编写activity_main.xml

    <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:orientation="vertical"
        tools:context=".MainActivity" >
    
        <Button 
            android:onClick="start"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="开启服务"
            />
        
        <Button 
            android:onClick="stop"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="停止服务"
            />
            <Button 
            android:onClick="bind"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="绑定服务"
            />
        
        <Button 
            android:onClick="unbind"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="解除绑定服务"
            />
        
        <Button 
            android:onClick="change"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="调用方法,切换至下一首歌曲"
            />
    
    </LinearLayout>
    View Code

    2、编写MainActivity.java

    package com.hyzhou.testservice;
    
    import com.hyzhou.testservice.TestServer.MyBinder;
    
    import android.os.Bundle;
    import android.os.IBinder;
    import android.view.View;
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.content.ServiceConnection;
    
    
    public class MainActivity extends Activity {
    	//步骤4:在activity里面得到服务IBinder对象的引用
    	private TestServer.MyBinder myBinder;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}
    
    	public void start(View view)
    	{
    		Intent intent=new Intent(this,TestServer.class);
    		startService(intent);
    		
    	}
    	public void stop(View view)
    	{
    		Intent intent=new Intent(this,TestServer.class);
    		stopService(intent);
    	}
    	
    	public void bind(View view)
    	{
    		Intent intent=new Intent(this,TestServer.class);
    		/**
    		 * intent 激活服务意图
    		 * conn 代理人中间人对象,用来跟服务建立联系不能为空
    		 * BIND_AUTO_CREATE 在绑定服务的时候 如果服务不存在就自动创建
    		 */
    		//步骤1:采用绑定的方式开启服务
    		bindService(intent, new MyConn(), BIND_AUTO_CREATE);
    		
    	}
    	public void unbind(View view)
    	{
    		Intent intent=new Intent(this,TestServer.class);
    		
    	}
    	
    	public void change(View view)
    	{
    		/**
    		 * 由于系统框架在创建服务的时候会创建与之对应的上下文
    		 * 下面的代码是直接new对象
    		 * TestService service=new TestService();
    		 * service.changeSing("月亮之上");
    		 */
    		//步骤5:利用IBinder对象间接调用服务里面的方法
    		myBinder.callchangeSing("月亮至上");
    		
    	}
    	
    	private class MyConn implements ServiceConnection{
    		
    		//在服务被成功绑定的时候调用的方法
    		@Override
    		public void onServiceConnected(ComponentName name, IBinder service) {
    			// TODO Auto-generated method stub
    			System.out.println("testserver代理人返回回来了");
    			//步骤3:服务返回的IBinder对象会被传递给MyConn的回调方法
    			myBinder=(MyBinder)service;
    			
    		}
    		
    		//在服务失去绑定的时候调用的方法  只有程序异常终止才会调用该方法
    		@Override
    		public void onServiceDisconnected(ComponentName name) {
    			// TODO Auto-generated method stub
    			
    		}
    	}
    }
    

      3、编写TestServer服务

    package com.hyzhou.testservice;
    import android.app.Service;
    import android.content.Intent;
    import android.os.Binder;
    import android.os.IBinder;
    import android.widget.Toast;
    
    /**
     * 
     */
    
    /**
     * @author hyzhou
     *
     * 2013-12-10
     */
    public class TestServer extends Service {
    
    	
    	@Override
    	public IBinder onBind(Intent intent) {
    		// TODO Auto-generated method stub
    		
    		System.out.println("服务被成功的绑定了------...");
    		//步骤2:服务在成功绑定的时候会调用onBind方法,返回一个IBinder对象
    		return new MyBinder();
    	}
    	public  class MyBinder extends Binder{
    		@SuppressWarnings("unused")
    		public void callchangeSing(String name)
    		{
    			changeSing(name);
    		}
    	}
    	
    	@Override
    	public void onCreate() {
    		// TODO Auto-generated method stub
    		super.onCreate();
    		System.out.println("开启服务------...");
    	}
    	
    	
    	@Override
    	public void onDestroy() {
    		// TODO Auto-generated method stub
    		super.onDestroy();
    		System.out.println("销毁服务------...");
    	}
    	
    	public void changeSing(String name)
    	{
    		Toast.makeText(getApplicationContext(), "切换至当前的音乐"+name, 0).show();
    	}
    
    }
    

      

  • 相关阅读:
    ES6中的let关键字,有什么用呢?
    ES6系列-什么是ES6?新手应该怎么理解
    css的变量教程,更强大的css
    尤雨溪在直播中讲到的Vue3.0 Beta的那些特性,快记笔记了
    前端基础进阶(七)-前端工程师最容易出错的问题-this关键字
    前端基础进阶(六)-大厂面试题问题:循环闭包与setTimeout
    JavaScript 中 this的指向
    What happens to our code? JavaScript 代码是怎样执行的
    Truthy and Falsy Values and Equality Operators
    iDisposable
  • 原文地址:https://www.cnblogs.com/hyzhou/p/3467150.html
Copyright © 2011-2022 走看看