From c7b4da0b447048025cc710d2835cb183fea8cf03 Mon Sep 17 00:00:00 2001 From: "1148980035@qq.com" <1148980035@qq.com> Date: Fri, 13 Jun 2025 23:13:59 +0800 Subject: [PATCH] =?UTF-8?q?GTaskSyncService=E6=98=AF=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E5=A4=84=E7=90=86Google=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=93=8D=E4=BD=9C=E7=9A=84Android=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E7=B1=BB=E3=80=82=E5=AE=83=E6=8F=90=E4=BE=9B=E4=BA=86?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=90=8C=E6=AD=A5=E3=80=81=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=AD=89=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E5=B9=BF=E6=92=AD=E6=9C=BA=E5=88=B6=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=90=8C=E6=AD=A5=E7=8A=B6=E6=80=81=E5=92=8C=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E3=80=82=201.=E4=B8=BB=E8=A6=81=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=9A=20=E3=80=82=E5=90=8C=E6=AD=A5=E7=AE=A1=E7=90=86?= =?UTF-8?q?=EF=BC=9A=E9=80=9A=E8=BF=87=20GTaskASyncTask=20=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E5=BC=82=E6=AD=A5=E5=90=8C=E6=AD=A5=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E5=90=AF=E5=8A=A8=E5=92=8C=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E6=93=8D=E4=BD=9C=E3=80=82=20=E3=80=82=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E9=80=9A=E7=9F=A5=EF=BC=9A=E9=80=9A=E8=BF=87=E5=B9=BF?= =?UTF-8?q?=E6=92=AD=E6=9C=BA=E5=88=B6=E5=90=91=E5=BA=94=E7=94=A8=E5=8F=91?= =?UTF-8?q?=E9=80=81=E5=90=8C=E6=AD=A5=E7=8A=B6=E6=80=81=EF=BC=88=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=AD=A3=E5=9C=A8=E5=90=8C=E6=AD=A5=EF=BC=89=E5=92=8C?= =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E6=B6=88=E6=81=AF=E3=80=82=20=E3=80=82?= =?UTF-8?q?=E5=86=85=E5=AD=98=E7=AE=A1=E7=90=86=EF=BC=9A=E5=9C=A8=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=86=85=E5=AD=98=E4=B8=8D=E8=B6=B3=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=BC=9A=E8=87=AA=E5=8A=A8=E5=8F=96=E6=B6=88=E6=AD=A3=E5=9C=A8?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E7=9A=84=E5=90=8C=E6=AD=A5=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E3=80=82=20=E3=80=82=E9=9D=99=E6=80=81=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=9A=E6=8F=90=E4=BE=9B=E9=9D=99=E6=80=81=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E8=AE=A9Activity=E6=88=96Context=E5=8F=AF=E4=BB=A5=E6=96=B9?= =?UTF-8?q?=E4=BE=BF=E5=9C=B0=E5=90=AF=E5=8A=A8=E6=88=96=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=EF=BC=8C=E4=BB=A5=E5=8F=8A=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=20=20=20=E5=90=8C=E6=AD=A5=E7=8A=B6=E6=80=81=E3=80=82=202.?= =?UTF-8?q?=E6=A0=B8=E5=BF=83=E7=BB=84=E4=BB=B6=20=E3=80=82mSyncTask?= =?UTF-8?q?=EF=BC=9A=E6=89=A7=E8=A1=8C=E5=BC=82=E6=AD=A5=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9A=84=E5=AF=B9=E8=B1=A1=E3=80=82=20?= =?UTF-8?q?=E3=80=82mSyncProgress=EF=BC=9A=E5=AD=98=E5=82=A8=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E5=90=8C=E6=AD=A5=E8=BF=9B=E5=BA=A6=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E7=AC=A6=E4=B8=B2=E3=80=82=20=E3=80=82?= =?UTF-8?q?=E5=B9=BF=E6=92=AD=E6=9C=BA=E5=88=B6=EF=BC=9A=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E9=A2=84=E5=AE=9A=E4=B9=89=E7=9A=84=E5=B9=BF=E6=92=AD=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E5=92=8C=E9=94=AE=E5=90=8D=E5=8F=91=E9=80=81=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E7=8A=B6=E6=80=81=E5=92=8C=E8=BF=9B=E5=BA=A6=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E3=80=82=203.=E4=BD=BF=E7=94=A8=E6=96=B9=E5=BC=8F=20?= =?UTF-8?q?=E3=80=82=E5=85=B6=E4=BB=96=E7=BB=84=E4=BB=B6=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E8=B0=83=E7=94=A8startSync(Activity)?= =?UTF-8?q?=E6=88=96cancelSync(Context)=E6=96=B9=E6=B3=95=E6=9D=A5?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=90=8C=E6=AD=A5=E8=BF=87=E7=A8=8B=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E9=80=9A=E8=BF=87=E7=9B=91=E5=90=AC=E5=B9=BF=E6=92=AD?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=90=8C=E6=AD=A5=E7=8A=B6=E6=80=81=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notes/gtask/remote/GTaskSyncService.java | 92 ++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskSyncService.java b/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskSyncService.java index cca36f7..9939522 100644 --- a/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskSyncService.java +++ b/src/Notes-master/src/net/micode/notes/gtask/remote/GTaskSyncService.java @@ -23,54 +23,97 @@ import android.content.Intent; import android.os.Bundle; import android.os.IBinder; +/** + * GTaskSyncService 是一个用于处理 Google 任务同步操作的服务类。 + * 该服务提供了启动同步、取消同步等功能,并通过广播机制通知同步状态和进度。 + */ public class GTaskSyncService extends Service { + // 用于在 Intent 中传递同步操作类型的键名 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; sendBroadcast(""); stopSelf(); } }); + // 发送广播通知同步开始 sendBroadcast(""); + // 执行异步同步任务 mSyncTask.execute(); } } + /** + * 取消同步任务的方法。 + * 如果当前有正在进行的同步任务,则调用其取消同步的方法。 + */ private void cancelSync() { if (mSyncTask != null) { mSyncTask.cancelSync(); } } + /** + * 服务创建时调用的方法。 + * 初始化同步任务对象为 null。 + */ @Override public void onCreate() { mSyncTask = null; } + /** + * 服务启动时调用的方法。 + * 根据 Intent 中传递的同步操作类型,执行相应的操作。 + * + * @param intent 启动服务的 Intent 对象 + * @param flags 启动标志 + * @param startId 启动 ID + * @return 服务的启动模式 + */ @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(); @@ -86,6 +129,10 @@ public class GTaskSyncService extends Service { return super.onStartCommand(intent, flags, startId); } + /** + * 系统内存不足时调用的方法。 + * 如果当前有正在进行的同步任务,则取消该任务。 + */ @Override public void onLowMemory() { if (mSyncTask != null) { @@ -93,36 +140,79 @@ public class GTaskSyncService extends Service { } } + /** + * 绑定服务时调用的方法。 + * 该服务不支持绑定,返回 null。 + * + * @param intent 绑定服务的 Intent 对象 + * @return 绑定的 IBinder 对象,这里返回 null + */ public IBinder onBind(Intent intent) { return null; } + /** + * 发送广播通知同步状态和进度的方法。 + * + * @param msg 同步进度消息 + */ public void sendBroadcast(String msg) { mSyncProgress = msg; + // 创建一个广播 Intent 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); } + /** + * 静态方法,用于从 Activity 启动同步服务。 + * + * @param activity 调用该方法的 Activity 对象 + */ public static void startSync(Activity activity) { + // 设置 GTaskManager 的 Activity 上下文 GTaskManager.getInstance().setActivityContext(activity); + // 创建一个启动服务的 Intent Intent intent = new Intent(activity, GTaskSyncService.class); + // 添加启动同步操作的类型 intent.putExtra(GTaskSyncService.ACTION_STRING_NAME, GTaskSyncService.ACTION_START_SYNC); + // 启动服务 activity.startService(intent); } + /** + * 静态方法,用于从 Context 取消同步服务。 + * + * @param context 调用该方法的 Context 对象 + */ public static void cancelSync(Context context) { + // 创建一个启动服务的 Intent 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; } -} +} \ No newline at end of file