您的位置:首页 > 移动开发 > Android开发

Android——服务

2015-11-06 12:15 369 查看
服务默默的在后台工作着,执行着不需要和用户交互的工作。

服务依赖于应用程序进程而存活

作为四大组件之一,服务具备共同的特点——需要在AndroidManifest中注册

Android多线程编程

需要注意的是——一定不要在子线程中进行UI操作,否则会阻塞主线程出现异常

/** 主要的逻辑是在这里完成,但是考虑到:服务默认是在主线程执行的,如果在这里进行比较费时的操作<br/>
* 就容易出现ANR(Application Not Responding).<br/>
* 所以标准的写法是在这里新建一个子线程执行逻辑处理<br/>
* 但是:这样做了之后,必须要使用stopService或stopSelf才能停得下来
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("test", "service onStartCommand");
new Thread(new Runnable() {

@Override
public void run() {
// 逻辑处理——不能进行UI更新
// ...
// 这里处理完之后调用停止服务
stopSelf();

}
}).start();
return super.onStartCommand(intent, flags, startId);
}


通过异步消息处理机制进行UI操作

在主线程定义一个handler

public static final int SHOW_RESPONSE = 0;
private Handler handler = new Handler() {

@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SHOW_RESPONSE:
String response = (String) msg.obj;
// 进行UI更新:根据子线程换回来的msg.obj的值和msg.what的值break;

default:
break;
}
}

};


子线程通过handler发送数据

new Thread(new Runnable() {

@Override
public void run() {try {
// 将获取到的数据交给Handler处理
Message msg = new Message();
msg.what = SHOW_RESPONSE;
msg.obj = 对象;
handler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}

}
}).start();


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.servicebesttest"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".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.servicebesttest.LongRunningService" >
</service>

<receiver android:name="com.example.servicebesttest.ServiceReceiver" >
</receiver>
</application>

</manifest>


AndroidManifest.xml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: