1,Service是什么
2,service不是什么
service:不是进程 不是线程
3,service的分类
StartSevice
1, START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
2,START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
3,START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
4,START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启
BinderSevice
4,启动service
5绑定service
>里面封装里一个工作线程
service:他是无界面,执行耗时较长的app 组件
优先级高于Activity
2,service不是什么
service:不是进程 不是线程
3,service的分类
StartSevice
1, START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
2,START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
3,START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
4,START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启
BinderSevice
4,启动service
- >1,通过startService()方法启动的
- >2,一旦被启动 就会无限制的在后台执行 直到里面的操作执行完毕 才会被销毁
- >3,一旦启动不会向启动者返回任何结果
- >4,启动的组件被销毁 服务不会被销毁
5绑定service
- >1,通过bindService()方法绑定的
- >2,可以和启动者组件进行交互 启动者组件可以获取服务的对象 可以调用里面的方法
- >3,多个程序组件可以绑定到同一个服务上 多个组件的绑定被解除时 才会被销毁
>里面封装里一个工作线程
一个线程能满足操作时 那么就可以用IntentService
7 ,使用场景
播放音乐,监听用户某一操作,记录地理位置变化
实例1--开启和停止服务
MainActivity.java
package com.example.week5_day1_server01;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
/**
* 步骤:1 创建一个类,继承Service
* 2 实现onCreate,onStartCommand,onDestroy方法
* 3 在清单配置文件里注册服务
* 4使用startService启动服务,发送一个意图
* 5 使用stopService发送一个意图停止服务
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.start:
//创建意图
Intent service = new Intent(getApplicationContext(),
MyService.class);
startService(service);//开启服务
break;
case R.id.stop:
Intent service2 = new Intent(getApplicationContext(),
MyService.class);//创建意图
stopService(service2);//停止服务
break;
default:
break;
}
}
}
自定义Service类
package com.example.week5_day1_server01;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
/**
* 新建一个类,继承Service
*/
public class MyService extends Service{
private static final String TAG="MyService";
@Override
public void onCreate() {//服务创建时被调用
// TODO Auto-generated method stub
super.onCreate();
Log.i(TAG, "--------onCreate--------");
}
/*
* 启动服务时调用
*
* intent:表示启动的组件传递过来的intent对象
* flags:标记
* startId:表示请求的标识
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.i(TAG, "--------onStartCommand--------");
return super.onStartCommand(intent, flags, startId);
}
/*
* 销毁服务
*/
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "--------onDestroy--------");
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.i(TAG, "--------onBind--------");
return null;
}
}
布局文件
<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">
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="启动服务" />
<Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="停止服务" />
</LinearLayout>
清单配置文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.week5_day1_server01"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.week5_day1_server01.MainActivity"
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="com.example.week5_day1_server01.MyService"></service>
</application>
</manifest>