重点:整个新浪微博的Service的框架

一、新建javabean类task


package Bean;

import java.util.Map;

/**taskId,taskParam
 * Created by Administrator on 2016/8/23.
 */
public class Task {
    //任务Id
    private int taskId;
    //参数,用于存放比如用户信息
    private Map<String,Object> taskParams;
    /*
    定义了一个私有的Map集合
Map的存放形式为键值对,key-value ,key为String类型,value为Object类型
这个Map只能在本类被访问,因为它有个修饰符private ,私有的
     */
    public static final int WEIBO_LOGIN=1;

    public Task(int taskId, Map<String, Object> taskParams)  //taskId就是传入的WEIBO_LOGIN,用于Handler的判断case
    {
        this.taskId = taskId;
        this.taskParams = taskParams;
    }

    public int getTaskId() {
        return taskId;
    }

    public Map<String, Object> getTaskParams() {
        return taskParams;
    }

    public void setTaskId(int taskId) {
        this.taskId = taskId;
    }

    public void setTaskParams(Map<String, Object> taskParams) {
        this.taskParams = taskParams;
    }
}

二、新建Service类MainService

/**
 * 这里我就要讲解真个MainService的各个函数的最用以及创建的先后顺序,继承Service 和Runnable
 * 1.创建task类,MainService类,IWeiBoActivity接口
 * 2.让LoginActivity继承IWeiBoActivity
 * 1.新建队列对象 private static Queue<Task> tasks=new LinkedList<Task>();       //创建任务队列对象
 * 2.创建newTask(Activity activity)类,用于放入一个Activity对象
 * 3.在Oncreate()中创建线程Thread()开启
 * 4.编写run()函数不停监听队列中的任务,并且执行task();
 * 5.编写dotask()处理业务逻辑,根据task的Id执行相应的操作,并且通过message,传送给Handler处理
 * 6.编写handler,根据 msg.what来执行相应的操作,更新UI
 * 7.跟新UIIWeiBoActivity activity= (IWeiBoActivity) getActivityByName("LoginActivity");//根据活动名,获取当前活动对象activity.refresh(msg.obj);
 * 8.创建ArrayList用于存放活动,管理活动 private static ArrayList<Activity> appActivities=new ArrayList<Activity>();//创建一个Activity集合,用于加入需要更新UI的Activity
 * 9.编写newActivity()
 * 10.编写getAppactionName(),用于获取活动的name,表明更新那个活动
 * 11.  IWeiBoActivity activity= (IWeiBoActivity) getActivityByName("LoginActivity");//根据活动名,获取当前活动对象
 activity.refresh(msg.obj);
 * 12.启动服务,运行
 * Intent intent=new Intent(this,MainActivity.class);
 startService(intent);
 init();
         MainService.newActivity(this);   //将对象加入活动队列中
         Task task=new Task(Task.WEIBO_LOGIN,null);//创建task对象,一个参数是用途Hnadler,thread的参数,第二个为需要传入的数据,比如用户密码,token等
         MainService.newTask(task);



/**后台运行,处理数据,顺序MainService启动,再run()开启线程,再UI发出任务new task(task t),之后doTask(Task t)处理业务逻辑,发挥跟新消息给主线程,Hannder()处理消息队列
 * 更新UI,refresh(mess)
 * Created by Administrator on 2016/8/23.
 */

package Logic;
/*
方法的static是为了在别的类中调用,如MainService.newTask();
 */
import android.app.Activity;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.support.annotation.Nullable;
import android.util.Log;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

import Bean.Task;
import app.coolweather.com.weibo.IWeiBoActivity

/**后台运行,处理数据,顺序MainService启动,再run()开启线程,再UI发出任务new task(task t),之后doTask(Task t)处理业务逻辑,发挥跟新消息给主线程,Hannder()处理消息队列
 * 更新UI,refresh(mess)
 * Created by Administrator on 2016/8/23.
 */
public class MainService extends Service implements Runnable{
    private static Queue<Task> tasks=new LinkedList<Task>();       //创建任务队列对象
    private static ArrayList<Activity> appActivities=new ArrayList<Activity>();//创建一个Activity集合,用于加入需要更新UI的Activity
    private boolean isRun;     //是否运行线程

    //异步处理
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case Task.WEIBO_LOGIN:     //用户登录
                    //跟新UI
                    IWeiBoActivity activity= (IWeiBoActivity) getActivityByName("LoginActivity");//根据活动名,获取当前活动对象
                    activity.refresh(msg.obj);

            }
        }
    };

 //添加任务到队列中,添加一个Activity对象
    public static void newTask(Task t)
    {
        tasks.add(t);
    }
    //添加到集合中
    public static void newActivity(Activity activity){
        appActivities.add(activity);

    }
    根据Activity活动名,获取当前活动对象
    public Activity getActivityByName(String name){
        if(!appActivities.isEmpty())
        {
            for (Activity activity : appActivities)
            {
                if(null != activity)
                {
                    if(activity.getClass().getName().indexOf(name) >0)
                    {
                        return activity;
                    }
                }
            }
        }

        return null;

    }


    @Override
    public void onCreate() {
        super.onCreate();
        isRun=true;
        //因为继承了Runnable,所以直接开启线程不需要再new Runnable(),下面的run(),和这里是同一个线程
        Thread thread=new Thread();
        thread.start();
    }
//将任务放在run()中等待处理
    @Override
    public void run() {
        //不停的去监听队列里面的任务
        while(isRun){
            Task task = null;
            if(!tasks.equals("")){
                task=tasks.poll();//执行任务后将这个任务从队列中移除,poll() 方法用于检索并移除此队列的头,则返回null,如果此队列为空。
                if(task!=null){
                    doTask(task);
                }

            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }
    //doTask(Task t)处理业务逻辑
    private void doTask(Task t){
      //  尽量使用 Message msg = handler.obtainMessage();的形式创建Message.msg.obj = result1;   //msg.obj=?从这里把你想传递的数据放进去就行了
        Message msg=handler.obtainMessage();
        msg.what=t.getTaskId();
        switch (t.getTaskId()){
            case Task.WEIBO_LOGIN:
                Log.d("微博登录","_____________>");
                msg.obj="登陆成功";
                break;
            default:
                break;

        }
        handler.sendMessage(msg);

    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值