Android开发-后端Model_Service
2015年12月26日
1 目标:后台服务功能,不具备交互展示功能。
2 原理:Activity删除交互功能。
3 流程:创建服务,创建交互内容,调用服务。
3.1 创建服务:app->java右键-》new-》service-》Service。
3.2 创建服务后会自动重写onBind()绑定响应函数,这里需要重写onCreate()服务创建响应函数和onStartCommand()服务启动响应函数。
//ServiceWithoutIntent.java
package lee.com.demo;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class ServiceWithoutIntent extends Service {
public ServiceWithoutIntent() {
}
@Override
public void onCreate() {
super.onCreate();
Log.d("ServiceWithoutIntent", "created.");
}
@Override
public int onStartCommand(Intent intent, int flags, intstartId) {
Log.d("ServiceWithoutIntent", "onStartCommand.");
String info="intent="+intent.getStringExtra("xx")+",flag="+flags+",startId="+startId;
Log.d("ServiceWithoutIntent",info);
returnsuper.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communicationchannel to the service.
Log.d("ServiceWithoutIntent","Binded..");
return null;
}
}
3.3 创建交互内容:intent
在页面中添加一个Button,设置响应函数为btnClick(),在其中设置intent和启动服务。
Intent i=newIntent(MainActivity.this,ServiceWithoutIntent.class);
i.putExtra("xx","xx123");
3.4 调用服务:startService()
startService(i);
3.5 示例
//结果:点击按钮后在logcat中出现以下信息
01-16 17:59:29.32520378-20378/lee.com.demo D/ServiceWithoutIntent: onStartCommand.
01-16 17:59:29.32520378-20378/lee.com.demo D/ServiceWithoutIntent: intent=xx123,flag=0,startId=1
//ServiceWithoutIntent.java
package lee.com.demo;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class ServiceWithoutIntent extends Service {
public ServiceWithoutIntent() {
}
@Override
public void onCreate() {
super.onCreate();
Log.d("ServiceWithoutIntent", "created.");
}
@Override
public int onStartCommand(Intent intent, int flags, intstartId) {
Log.d("ServiceWithoutIntent", "onStartCommand.");
String info="intent="+intent.getStringExtra("xx")+",flag="+flags+",startId="+startId;
Log.d("ServiceWithoutIntent",info);
returnsuper.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communicationchannel to the service.
Log.d("ServiceWithoutIntent","Binded..");
return null;
}
}
//AndroidManifest.xml
<?xmlversion="1.0" encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="lee.com.demo" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" >
<intent-filter>
<actionandroid:name="android.intent.action.MAIN" />
<categoryandroid:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".ServiceWithoutIntent"
android