zoukankan      html  css  js  c++  java
  • Android_Service

    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="com.example.service.MainActivity" >
        <Button 
            android:id="@+id/service_start"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="start service"
            android:onClick="doClick"/>
        <Button 
            android:id="@+id/service_stop"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="stop service"
            android:onClick="doClick"/>
        <Button 
            android:id="@+id/service_bind"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="bind serrvice"
            android:onClick="doClick"/>
        <Button 
            android:id="@+id/music_start"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="start the music"
            android:onClick="doClick"/>
        <Button 
            android:id="@+id/music_pause"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="pause the music"
            android:onClick="doClick"/>
        <Button 
            android:id="@+id/service_unbind"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="unbind service"
            android:onClick="doClick"/>
        
    
    </LinearLayout>

    源代码:

    Myservice1:

    package com.example.service;
    
    import android.app.Service;
    import android.content.Intent;
    import android.os.IBinder;
    import android.util.Log;
    
    public class MyService extends Service {
        @Override//创建服务时调用,在服务没有关闭之前,只执行一次
        public void onCreate() {
            // TODO Auto-generated method stub
            Log.i("info", "onCreate");
            super.onCreate();
        }
        @Override//创建服务后自动调用
        public int onStartCommand(Intent intent, int flags, int startId) {
            // TODO Auto-generated method stub
            Log.i("info", "onStartCommeand");
            
            return super.onStartCommand(intent, flags, startId);
        }
        @Override
        public void onDestroy() {
            // TODO Auto-generated method stub
            Log.i("info", "onDestroy");
            super.onDestroy();
        }
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
    
    }

    Myservice2:

    package com.example.service;
    
    import android.app.Service;
    import android.content.Intent;
    import android.os.Binder;
    import android.os.IBinder;
    import android.util.Log;
    
    public class MyService2 extends Service {
        @Override//创建服务时调用,在服务没有关闭之前,只执行一次
        public void onCreate() {
            // TODO Auto-generated method stub
            Log.i("info", "onCreate");
            super.onCreate();
        }
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            // TODO Auto-generated method stub
            Log.i("info", "onStartCommeand");
            
            return super.onStartCommand(intent, flags, startId);
        }
        @Override
        public void onDestroy() {
            // TODO Auto-generated method stub
            Log.i("info", "onDestroy");
            super.onDestroy();
        }
        //IBindler是一个接口,Binder是其实现类
        class MyBinder extends Binder{
            //返回一个service对象,给实例源
            public MyService2 getService(){
                return MyService2.this;
            }
        }
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return new MyBinder();//返回一个Binder的子类对象
        }
        public void music_Start(){
            Log.i("info", "播放音乐");
        }
        public void music_Pause(){
            Log.i("info", "暂停播放音乐");
        }
        
    
    }

    MainActivity:

    package com.example.service;
    
    import com.example.service.MyService2.MyBinder;
    import com.example.servies.R;
    
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    /**
     * Service:(需注册)
     * 定义:
     *         -应用程序组件
     *         -后台运行,不可见,没有界面
     *         -优先级高于Activity
     * 用途:
     *         -    播放音乐,记录地理位置信息的改变,监听某种动作
     * 注意:
     *         -service不是一个单独的进程,一般和应用程序运行在同一个进程中,除非进行指定
     *         -运行在主线程,不能用它来做耗时操作
     *         -可以在服务中开一个线程,在线程中做耗时动作
     * start方式特点:
     *         -服务跟启动源没有关系
     *         -无法得到服务对象
     * 
     * Bind方式特点:(可以对service对象进行数据处理)
     *         -通过Ibinder接口实例,返回一个ServiceConnection对象给实例源
     *         -通过ServiceConnection对象的相关方法可以得到service对象
     * !!!注意:绑定后续解绑,否则退出程序后报错
     * 
     * 生命周期:
     * start方式      startService()-->onCreate()-->Service running-->onDestroy()-->Service shut down
     * Bind方式      bindService()-->onCreate()-->Clients are bound to service-->onUnbind()-->onDestroy()-->Service shut down
     * 
     * 
     * @author Administrator
     *
     */
    public class MainActivity extends Activity {
    
        private Intent intent1;
        private MyService2 service;
        ServiceConnection conn = new ServiceConnection(){
    
            @Override//当服务跟启动源连接的时候 会自动回调
            public void onServiceConnected(ComponentName name, IBinder binder) {
                // TODO Auto-generated method stub
                service = ((MyBinder)binder).getService();
            }
    
            @Override//当服务跟启动源断开的时候会自动回调
            public void onServiceDisconnected(ComponentName name) {
                // TODO Auto-generated method stub
         
            }
            
        };
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
        public void doClick(View view){
            switch(view.getId()){
            case R.id.service_start:
                intent1 = new Intent(MainActivity.this,MyService.class);
                startService(intent1);
                break;
            case R.id.service_stop:
                stopService(intent1);
                break;
            case R.id.service_bind:
                //如果调用了startService(intent)方法,活动结束后必须关闭
                Intent intent2 = new Intent(MainActivity.this,MyService2.class);
                bindService(intent2,//确定连接的服务
                        conn,//接收服务对象,自动调用里面的方法
                        BIND_AUTO_CREATE); //自动创建服务
                break;
            case R.id.music_start:
                service.music_Start();
                break;
            case R.id.music_pause:
                service.music_Pause();
                break;
            case R.id.service_unbind:
                unbindService(conn);//解除绑定,当没有绑定时,解除绑定会报错
                break;
            }
        }
        
    }

  • 相关阅读:
    LCT 动态树 模板
    [HNOI2010] 物品调度 fsk
    [HNOI2010] 矩阵 matrix
    [HNOI2010] 平面图判定 planar
    [HNOI2010] 公交线路 bus
    [HNOI2017]抛硬币
    [HNOI2010] 弹飞绵羊 bounce
    [HNOI2010] 合唱队 chorus
    [HNOI2017]礼物
    [HNOI2017]大佬
  • 原文地址:https://www.cnblogs.com/fangg/p/5573889.html
Copyright © 2011-2022 走看看