Android中服务的使用方法service和使用广播更新ui界面
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2017-10-15 09:08:00
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
服务说明
android中的服务有两种一种是服务启动后就跟启动者没有关系啦,启动者关闭服务并没有影响,还有一个是跟启动者绑定的启动者关闭后这个服务也就停止啦。
使用方法
Android中,service的开启,默认是绑定activity的,是activity级的。如果要实现当退出程序后,保持Service的运行,那么需要把service设置成为system级的,首先声明权限
<service android:name="com.androidnodesocket.PushNotificationService" android:enabled="true" android:process="system" />
然后定义一个推送消息的服务类
package com.androidnodesocket;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
/**
* Created by Administrator on 2017-10-14.
*/
public class PushNotificationService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onCreate() {
super.onCreate();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}最后在启动的activity中启动服务
//启动服务
Intent i = new Intent(this, PushNotificationService .class);
//下面写自己的路径
i.setAction("com.androidnodesocket.PushNotificationService");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startService(i);在服务中更新ui界面
首先在mainActivity中定义一个内部广播的类(广播接收器)用来接收到数据后更新到 textViewJishu 这个TextView的文本中
/**
* 定义广播接收器(内部类)
*
* @author lenovo
*
*/
private class UpdateUIBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
textView.setText(String.valueOf(intent.getExtras().getInt("count")));
}
}在MainActivity中声明两个变量并且在初始化的时候注册这个接收器的实例(下面是部分代码,请放到对应的位置)
//声明一个操作常量字符串 public static final String ACTION_UPDATEUI = "action.updateUI"; //声明一个广播实例 public UpdateUIBroadcastReceiver broadcastReceiver; //在初始化的时候注册实例 // 动态注册广播 IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_UPDATEUI); broadcastReceiver = new UpdateUIBroadcastReceiver(); registerReceiver(broadcastReceiver, filter);
在推送消息的服务类中发送广播消息给界面
package com.androidnodesocket;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by Administrator on 2017-10-14.
*/
public class PushNotificationService extends Service {
private Timer timer;
private TimerTask task;
private int count;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onCreate() {
super.onCreate();
final Intent intent = new Intent();
intent.setAction(MainActivity.ACTION_UPDATEUI);
timer = new Timer();
task = new TimerTask() {
@Override
public void run() {
intent.putExtra("count", ++count);
sendBroadcast(intent);
}
};
timer.schedule(task, 1000, 1000);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}