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.
MiNoteRead/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskSyncService.java

175 lines
6.2 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.
*/
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;
/**
* Google Tasks同步服务
* 管理Google Tasks与本地笔记之间的同步操作的Service组件
* 提供开始同步、取消同步的功能,并通过广播通知同步状态和进度
*/
public class GTaskSyncService extends Service {
// 动作类型常量定义
public final static String ACTION_STRING_NAME = "sync_action_type"; // 动作类型的Intent额外数据键
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"; // 广播的Intent动作名称
public final static String GTASK_SERVICE_BROADCAST_IS_SYNCING = "isSyncing"; // 广播中同步状态的键
public final static String GTASK_SERVICE_BROADCAST_PROGRESS_MSG = "progressMsg"; // 广播中同步进度消息的键
// 同步任务相关变量
private static GTaskASyncTask mSyncTask = null; // 当前执行的同步任务实例
private static String mSyncProgress = ""; // 当前同步进度消息
/**
* 启动同步操作
* 创建并执行Google Tasks同步异步任务
* 如果已经有同步任务在执行,则不重复启动
*/
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() {
// 服务创建时初始化同步任务为null
mSyncTask = null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 处理传入的Intent根据动作类型执行相应的同步操作
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;
}
// 返回START_STICKY表示如果服务被系统杀死会在资源允许时重新创建
return START_STICKY;
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onLowMemory() {
// 系统内存不足时,如果有同步任务正在执行,则取消它以释放资源
if (mSyncTask != null) {
mSyncTask.cancelSync();
}
}
/**
* Service的绑定方法
* 该服务不支持绑定因此返回null
* @param intent 绑定意图
* @return null
*/
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
* 发送同步状态广播
* 通知应用其他组件同步的当前状态和进度
* @param msg 同步进度消息
*/
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);
}
/**
* 静态方法启动Google Tasks同步服务
* 这是启动同步的公共入口方法设置Activity上下文并发送启动同步的Intent
* @param activity 用于获取Google认证的Activity实例
*/
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);
}
/**
* 静态方法取消Google Tasks同步服务
* 这是取消同步的公共入口方法发送取消同步的Intent
* @param context 应用上下文
*/
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);
}
/**
* 静态方法:检查是否正在同步
* @return true表示正在同步false表示未在同步
*/
public static boolean isSyncing() {
return mSyncTask != null;
}
/**
* 静态方法:获取当前同步进度消息
* @return 当前同步进度消息字符串
*/
public static String getProgressString() {
return mSyncProgress;
}
}