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.
xiaomibianqian17/GTaskSyncService.java

147 lines
5.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.
*/
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任务GTask同步相关操作的服务类
public class GTaskSyncService extends Service {
// 用于在意图中指定同步操作类型的字符串常量
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_BROADCAST_PROGRESS_MSG = "progressMsg";
// 用于执行同步任务的异步任务对象
private static GTaskASyncTask mSyncTask = null;
// 用于存储同步进度消息的字符串
private static String mSyncProgress = "";
// 开始同步操作的私有方法
private void startSync() {
if (mSyncTask == null) {
// 创建一个新的GTaskASyncTask实例并传入当前服务实例和完成监听器
mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() {
public void onComplete() {
// 当同步任务完成时将mSyncTask设置为null发送广播并停止服务
mSyncTask = null;
sendBroadcast("");
stopSelf();
}
});
sendBroadcast("");
// 执行异步任务
mSyncTask.execute();
}
}
// 取消同步操作的私有方法
private void cancelSync() {
if (mSyncTask!= null) {
mSyncTask.cancelSync();
}
}
// 服务创建时调用初始化mSyncTask为null
@Override
public void onCreate() {
mSyncTask = null;
}
// 服务启动时调用,根据传入的意图执行相应的同步操作
@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);
}
// 当系统内存不足时调用,取消正在进行的同步任务
@Override
public void onLowMemory() {
if (mSyncTask!= null) {
mSyncTask.cancelSync();
}
}
// 服务绑定操作返回null表示不支持绑定
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;
}
}