zoukankan      html  css  js  c++  java
  • andorid 之service (Context 的 startService)

    Service 是android四大组件之一,它也有自己的生命周期,创建、配置service创建、配置Activity 的过程基本相似。

    Service没有前台程,只是在后台运行。

    开发步骤,

    •    定义一个继承Service的子类
    •    在AndoirdManifest.xml 文件中配置该Service
    介绍一下Service子类中常用的方法。
    •  abstract IBinder onBinder(Intent intent);该方法是Service 子类必须实现的方法,该方法返回一个IBinder对象,应用程序可以通该该对象与Service组件通信。
    •  void onCreate(); 当该Service第一次被创建后将立即回调该方法。
    • void destroy(); 当该Service 被关闭之前将会回调该方法。
    • void onStartCommand(Intent intent,int flags,int startId);该方法的早期版本是onStart(Intnet intent,int startId) 第次客户端调用startService(Intent) 方法启动该方法的Service 时都会回调该方法。
    • boolean onUnbind(Intent intent);当该Service上绑定的所有客户端都断开连接时将会回调该方法。
    以下为代码实现。
    第一步:我们写一个FirstService 实现自Service
    package com.hkrt.action;
    
    import android.app.Service;
    import android.content.Intent;
    import android.os.IBinder;
    
    public class FirstService extends Service {
    
    	@Override
    	public IBinder onBind(Intent intent) {
    		System.out.println("onBind");
    		return null;
    	}
        //此service被创建时调用
    	@Override
    	public void onCreate() {
    		System.out.println("onCreate");
    		super.onCreate();
    	}
    
    	
       //此service被启动时回调此方法
    	@Override
    	public int onStartCommand(Intent intent, int flags, int startId) {
    		System.out.println("onStartCommand");
    		return START_STICKY;  
    	}
    	//此service被关闭这前回调
    	@Override
    	public void onDestroy() {
    		System.out.println("onDestroy");
    		super.onDestroy();
    	}
    
    }
    

    第二步:在AndroidManifest.xml注册这个Service.和注册 Activity一样。显示intent 可以随变写,但要有意义。
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.hkrt.action"
          android:versionCode="1"
          android:versionName="1.0">
        <uses-sdk android:minSdkVersion="8" />
    
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".ServiceDemoActivity" android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <service android:name=".FirstService">
             <intent-filter >
               <action android:name="com.hkrt.action.FIRST_SERVICE"/>
             </intent-filter>
            </service>
        </application>
    </manifest>

    第三步:我们要通过两个Button 来开启和停止这个Service.代码比较简单就不写了。



    第四步:代码开启和停止这个Service.
    package com.hkrt.action;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    public class ServiceDemoActivity extends Activity {
    	Button start,end;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            start = (Button)findViewById(R.id.startService);
            end = (Button)findViewById(R.id.stopService);
            final Intent  intent = new Intent();
            intent.setAction("com.hkrt.action.FIRST_SERVICE"); 
            start.setOnClickListener(new View.OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				startService(intent);
    			}
    		});
            end.setOnClickListener(new View.OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				 stopService(intent);
    			}
    		});
        }
    }

    开启时:图片

    结束时:图片



    Service 的生命周期


  • 相关阅读:
    【Vue】 computed和watch的区别
    【总结】html5新增标签以及css3新增属性
    【前端经典面试题】前后端分离(说一说你理解的前后端分离?)
    【前端面试CSS】—垂直水平居中终极版
    【CSS】清浮动的常用四种方法
    【前端面试CSS】——盒子模型(标准模型和怪异模型)
    【JavaScript】JS常用的方法总结(不定期更新中)
    【Cordova】开发app遇到的坑之 按两次返回键退出程序
    【JavaScript】深拷贝和浅拷贝的总结(含义、区别及实现)
    【vue】路由传参的三种方式
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218345.html
Copyright © 2011-2022 走看看