You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
java/zz_code/gtask/remote/GTaskSyncService.java

163 lines
6.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//sync (同步)任务:主线程上排队执行的任务
//async (异步)任务:不进入主线程,而进入任务队列的任务
//gtask:远程任务系统
/*Service是在一段不定的时间运行在后台不和用户交互的应用组件
* 主要方法:
* private void startSync() 启动一个同步工作
* private void cancelSync() 取消同步
* public void onCreate()
* public int onStartCommand(Intent intent, int flags, int startId) service生命周期的组成部分相当于重启service比如在被暂停之后而不是创建一个新的service
* public void onLowMemory() 在没有内存的情况下如果存在service则结束掉这的service
* public IBinder onBind()
* public void sendBroadcast(String msg) 发送同步的相关通知
* public static void startSync(Activity activity)
* public static void cancelSync(Context context)
* public static boolean isSyncing() 判读是否在进行同步
* public static String getProgressString() 获取当前进度的信息
*/
package net.micode.notes.gtask.remote;
//引入工具类
import android.app.Activity;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
//GTask同步服务类继承自Android的Service类
public class GTaskSyncService extends Service {
//final修饰的变量表示常量static表示静态变量表示这个变量是类变量而不是实例变量,所有的实例共享这个变量
//定义一个字符串常量,表示同步操作的类型
public final static String ACTION_STRING_NAME = "sync_action_type";
//标识启动同步任务的操作
public final static int ACTION_START_SYNC = 0;
//标识取消同步任务的操作
public final static int ACTION_CANCEL_SYNC = 1;
//标识无效的操作
public final static int ACTION_INVALID = 2;
//定义一个字符串常量,表示同步服务的广播名称
public final static String GTASK_SERVICE_BROADCAST_NAME = "net.micode.notes.gtask.remote.gtask_sync_service";
//定义一个字符串常量,表示是否正在同步的广播名称
public final static String GTASK_SERVICE_BROADCAST_IS_SYNCING = "isSyncing";
//定义一个字符串常量,表示同步进度的广播名称
public final static String GTASK_SERVICE_BROAD CAST_PROGRESS_MSG = "progressMsg";
//定义一个GTaskASyncTask对象
private static GTaskASyncTask mSyncTask = null;
//定义一个字符串变量,表示同步进度
private static String mSyncProgress = "";
//定义方法:启动同步任务
private void startSync() {
if (mSyncTask == null) {
mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() {
public void onComplete() {
mSyncTask = null;
sendBroadcast("");
stopSelf();
}
});
sendBroadcast("");
mSyncTask.execute();
}
}
//定义方法:取消同步任务
private void cancelSync() {
if (mSyncTask != null) {
mSyncTask.cancelSync();
}
}
//重写方法:创建服务
@Override
public void onCreate() {
mSyncTask = null;
}
//重写方法Service 启动时的回调方法
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle bundle = intent.getExtras();
if (bundle != null && bundle.containsKey(ACTION_STRING_NAME)) {
switch (bundle.getInt(ACTION_STRING_NAME, ACTION_INVALID)) {
case ACTION_START_SYNC:
startSync();
break;
case ACTION_CANCEL_SYNC:
cancelSync();
break;
default:
break;
}
return START_STICKY;
}
return super.onStartCommand(intent, flags, startId);
}
//重写方法在没有内存的情况下如果存在service则结束掉这的service
@Override
public void onLowMemory() {
if (mSyncTask != null) {
mSyncTask.cancelSync();
}
}
//Service 绑定时调用的方法
public IBinder onBind(Intent intent) {
return null;
}
//定义方法:广播同步的相关通知
public void sendBroadcast(String msg) {
mSyncProgress = msg;
Intent intent = new Intent(GTASK_SERVICE_BROADCAST_NAME);
intent.putExtra(GTASK_SERVICE_BROADCAST_IS_SYNCING, mSyncTask != null);
intent.putExtra(GTASK_SERVICE_BROADCAST_PROGRESS_MSG, msg);
sendBroadcast(intent);
}
//静态方法:启动同步任务
public static void startSync(Activity activity) {
GTaskManager.getInstance().setActivityContext(activity);
Intent intent = new Intent(activity, GTaskSyncService.class);
intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_START_SYNC);
activity.startService(intent);
}
//静态方法:取消同步任务
public static void cancelSync(Context context) {
Intent intent = new Intent(context, GTaskSyncService.class);
intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_CANCEL_SYNC);
context.startService(intent);
}
//静态方法:判读是否在进行同步
public static boolean isSyncing() {
return mSyncTask != null;
}
//静态方法:获取当前进度的信息
public static String getProgressString() {
return mSyncProgress;
}
}