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; } }