package
com.zhf.android_framework01.logic;
import
java.util.ArrayList;
import
java.util.LinkedList;
import
com.zhf.android_framework01.model.Task;
import
com.zhf.android_framework01.ui.IActivity;
import
android.app.Activity;
import
android.app.Service;
import
android.content.Intent;
import
android.os.Handler;
import
android.os.IBinder;
import
android.os.Message;
/**
* 主框架类: 统一接收任务消息,处理不同的任务
* @author ZHF
*
*/
public
class
MainServices
extends
Service
implements
Runnable{
private
static
LinkedList<Task> tasks =
new
LinkedList<Task>();
private
static
ArrayList<Activity> activities =
new
ArrayList<Activity>();
private
boolean
isRun =
false
;
@Override
public
void
onCreate() {
isRun =
true
;
Thread thread =
new
Thread(
this
);
thread.start();
super
.onCreate();
}
/**
* 向集合中添加Activity对象
* @param activity 需要向集合中添加的实例
*/
public
static
void
addActivity(Activity activity) {
activities.add(activity);
}
/**
* 向集合中添加任务
* @param task 任务实例
*/
public
static
void
newTask(Task task) {
tasks.add(task);
}
/**
* 线程不断检测tasks中的任务
*/
@Override
public
void
run() {
while
(isRun) {
Task task =
null
;
if
(!tasks.isEmpty()) {
task = tasks.poll();
if
(
null
!= task) {
doTask(task);
}
}
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 处理任务(重要)
* @param task 任务实体
*/
private
void
doTask(Task task) {
Message msg = handler.obtainMessage();
msg.what = task.getTaskId();
switch
(msg.what) {
case
Task.FIRST_LOGIN:
System.out.println(
"doTask---->>>first login!"
);
msg.obj =
"第一次登录成功"
;
break
;
default
:
break
;
}
handler.sendMessage(msg);
}
/**
* 处理器
*/
private
Handler handler =
new
Handler() {
public
void
handleMessage(android.os.Message msg) {
switch
(msg.what) {
case
Task.FIRST_LOGIN:
IActivity activity = (IActivity) getActivityByName(
"LoginActivity"
);
activity.refresh(msg.obj);
break
;
}
}
};
/**
* 根据Activity的名字获取集合中对应的Activity
* @param string Activity的名字
* @return
*/
private
Activity getActivityByName(String string) {
if
(!activities.isEmpty()) {
for
(Activity activity : activities) {
if
(
null
!= activity) {
if
(activity.getClass().getName().indexOf(string) >
0
) {
return
activity;
}
}
}
}
return
null
;
};
public
static
void
exit() {
for
(Activity activity : activities) {
activity.finish();
}
System.exit(
0
);
}
@Override
public
IBinder onBind(Intent intent) {
System.out.println(
"------->onBind"
);
return
null
;
}
@Override
public
void
onStart(Intent intent,
int
startId) {
System.out.println(
"------->onStart"
);
super
.onStart(intent, startId);
}
@Override
public
void
onDestroy() {
System.out.println(
"------->onDestroy"
);
super
.onDestroy();
}
}