From 2a24a07537bbddee889583bb251c9be6337f965d Mon Sep 17 00:00:00 2001 From: lwh <3324016427@qq.com> Date: Wed, 18 Dec 2024 16:59:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BF=BB=E8=AF=91=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/GTaskSyncService.java | 113 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/GTaskSyncService.java diff --git a/src/GTaskSyncService.java b/src/GTaskSyncService.java new file mode 100644 index 0000000..ba5fd94 --- /dev/null +++ b/src/GTaskSyncService.java @@ -0,0 +1,113 @@ +/* + * 版权所有 (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * 根据Apache License, Version 2.0(“许可证”)授权; + * 除非遵守许可证,否则不得使用此文件。 + * 你可以在以下网址获得许可证的副本: + * http://www.apache.org/licenses/LICENSE-2.0 + * 除非适用法律要求或书面同意,软件 + * 按“原样”分发的基础上,没有任何形式的担保或条件,无论是明示或暗示。 + * 请参阅控制权限和 + * 许可证下的限制。 + */ +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; +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) { + mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() { + public void onComplete() { + mSyncTask = null; // 完成后将同步任务设置为null + sendBroadcast(""); // 发送广播 + stopSelf(); // 停止服务 + } + }); + sendBroadcast(""); + mSyncTask.execute(); // 执行同步任务 + } + } + private void cancelSync() { + // 取消同步的方法 + if (mSyncTask != null) { + mSyncTask.cancelSync(); // 调用同步任务的取消方法 + } + } + @Override + public void onCreate() { + mSyncTask = null; // 在服务创建时将同步任务设置为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; // 返回START_STICKY以保持服务运行 + } + return super.onStartCommand(intent, flags, startId); // 调用父类的onStartCommand方法 + } + @Override + public void onLowMemory() { + // 处理低内存情况的方法 + if (mSyncTask != null) { + mSyncTask.cancelSync(); // 如果同步任务正在进行,则取消同步 + } + } + public IBinder onBind(Intent intent) { + // 返回服务的绑定器,这里返回null表示服务不支持绑定 + return null; + } + public void sendBroadcast(String msg) { + // 发送广播的方法 + mSyncProgress = msg; // 更新同步进度字符串 + Intent intent = new Intent(GTASK_SERVICE_BROADCAST_NAME); // 创建广播Intent + 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); // 设置GTaskManager的活动上下文 + Intent intent = new Intent(activity, GTaskSyncService.class); // 创建Intent + 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 + intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_CANCEL_SYNC); // 添加取消同步的额外信息 + context.startService(intent); // 启动服务 + } + public static boolean isSyncing() { + // 静态方法,用于检查是否正在同步 + return mSyncTask != null; // 如果同步任务不为空,则返回true + } + public static String getProgressString() { + // 静态方法,用于获取同步进度字符串 + return mSyncProgress; // 返回同步进度字符串 + } +} \ No newline at end of file