Android中服务的使用方法service和使用广播更新ui界面

来源:赵克立博客 分类: Android 标签:--发布时间:2017-10-14 16:55:56最后更新:2017-10-15 09:08:00浏览:8878
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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;
    }
}



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python