From 5c54675a9fce98ef69ddcadcd1242a89be787c26 Mon Sep 17 00:00:00 2001 From: "1404563774@qq.com" <1404563774@qq.com> Date: Tue, 6 Jun 2023 14:49:48 +0800 Subject: [PATCH] remote-GTasksyncService.java Signed-off-by: 1404563774@qq.com <1404563774@qq.com> --- GCT | 1 - text.txt | 182 +++++++++++++++++++++++++++++++++---------------------- 2 files changed, 109 insertions(+), 74 deletions(-) delete mode 100644 GCT diff --git a/GCT b/GCT deleted file mode 100644 index 66dc905..0000000 --- a/GCT +++ /dev/null @@ -1 +0,0 @@ -undefined \ No newline at end of file diff --git a/text.txt b/text.txt index 1e7afe4..66dce46 100644 --- a/text.txt +++ b/text.txt @@ -1,11 +1,34 @@ +/* + * 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; -/*异步操作类,实现GTask的异步操作过程 +/* + * Service是在一段不定的时间运行在后台,不和用户交互的应用组件 * 主要方法: - * private void showNotification(int tickerId, String content) 向用户提示当前同步的状态,是一个用于交互的方法 - * protected Integer doInBackground(Void... unused) 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间 - * protected void onProgressUpdate(String... progress) 可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。 - * protected void onPostExecute(Integer result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI + * 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() 获取当前进度的信息 */ import android.app.Activity; import android.app.Service; @@ -13,96 +36,109 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.IBinder; -public class GTaskASyncTask extends AsyncTask { +public class GTaskSyncService extends Service { + public final static String ACTION_STRING_NAME = "sync_action_type"; + public final static int ACTION_START_SYNC = 0; - private static int GTASK_SYNC_NOTIFICATION_ID = 5234235; + public final static int ACTION_CANCEL_SYNC = 1; - public interface OnCompleteListener { - void onComplete(); - } + public final static int ACTION_INVALID = 2; - private Context mContext; + public final static String GTASK_SERVICE_BROADCAST_NAME = "net.micode.notes.gtask.remote.gtask_sync_service"; - private NotificationManager mNotifiManager; + public final static String GTASK_SERVICE_BROADCAST_IS_SYNCING = "isSyncing"; - private GTaskManager mTaskManager; + public final static String GTASK_SERVICE_BROADCAST_PROGRESS_MSG = "progressMsg"; - private OnCompleteListener mOnCompleteListener; + private static GTaskASyncTask mSyncTask = null; - public GTaskASyncTask(Context context, OnCompleteListener listener) { - mContext = context; - mOnCompleteListener = listener; - mNotifiManager = (NotificationManager) mContext - .getSystemService(Context.NOTIFICATION_SERVICE); - mTaskManager = GTaskManager.getInstance(); - } + private static String mSyncProgress = ""; - public void cancelSync() { - mTaskManager.cancelSync(); + //开始一个同步的工作 + private void startSync() { + if (mSyncTask == null) { + mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() { + public void onComplete() { + mSyncTask = null; + sendBroadcast(""); + stopSelf(); + } + }); + sendBroadcast(""); + mSyncTask.execute(); //这个函数让任务是以单线程队列方式或线程池队列方式运行 + } } - public void publishProgess(String message) { // 发布进度单位,系统将会调用onProgressUpdate()方法更新这些值 - publishProgress(new String[] { - message - }); - } - private void showNotification(int tickerId, String content) { - Notification notification = new Notification(R.drawable.notification, mContext - .getString(tickerId), System.currentTimeMillis()); - notification.defaults = Notification.DEFAULT_LIGHTS; // 调用系统自带灯光 - notification.flags = Notification.FLAG_AUTO_CANCEL; // 点击清除按钮或点击通知后会自动消失 - PendingIntent pendingIntent; //一个描述了想要启动一个Activity、Broadcast或是Service的意图 - if (tickerId != R.string.ticker_success) { - pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, - NotesPreferenceActivity.class), 0); //如果同步不成功,那么从系统取得一个用于启动一个NotesPreferenceActivity的PendingIntent对象 - - } else { - pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, - NotesListActivity.class), 0); //如果同步成功,那么从系统取得一个用于启动一个NotesListActivity的PendingIntent对象 + private void cancelSync() { + if (mSyncTask != null) { + mSyncTask.cancelSync(); } - notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content, - pendingIntent); - mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification);//通过NotificationManager对象的notify()方法来执行一个notification的消息 } @Override - protected Integer doInBackground(Void... unused) { - publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity - .getSyncAccountName(mContext))); //利用getString,将把 NotesPreferenceActivity.getSyncAccountName(mContext))的字符串内容传进sync_progress_login中 - return mTaskManager.sync(mContext, this); //进行后台同步具体操作 + public void onCreate() { //初始化一个service + mSyncTask = null; } @Override - protected void onProgressUpdate(String... progress) { - showNotification(R.string.ticker_syncing, progress[0]); - if (mContext instanceof GTaskSyncService) { //instanceof 判断mContext是否是GTaskSyncService的实例 - ((GTaskSyncService) mContext).sendBroadcast(progress[0]); + 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; //等待新的intent来是这个service继续运行 } + return super.onStartCommand(intent, flags, startId); } @Override - protected void onPostExecute(Integer result) { //用于在执行完后台任务后更新UI,显示结果 - if (result == GTaskManager.STATE_SUCCESS) { - showNotification(R.string.ticker_success, mContext.getString( - R.string.success_sync_account, mTaskManager.getSyncAccount())); - NotesPreferenceActivity.setLastSyncTime(mContext, System.currentTimeMillis()); //设置最新同步的时间 - } else if (result == GTaskManager.STATE_NETWORK_ERROR) { - showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_network)); - } else if (result == GTaskManager.STATE_INTERNAL_ERROR) { - showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_internal)); - } else if (result == GTaskManager.STATE_SYNC_CANCELLED) { - showNotification(R.string.ticker_cancel, mContext - .getString(R.string.error_sync_cancelled)); - } //几种不同情况下的结果显示 - if (mOnCompleteListener != null) { - new Thread(new Runnable() { //这里好像是方法内的一个线程,但是并不太懂什么意思 - - public void run() { //完成后的操作,使用onComplete()将所有值都重新初始化,相当于完成一次操作 - mOnCompleteListener.onComplete(); - } - }).start(); + public void onLowMemory() { + if (mSyncTask != null) { + mSyncTask.cancelSync(); } } -} \ No newline at end of file + + public IBinder onBind(Intent intent) { //不知道干吗用的 + 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中的相应参数的值 + intent.putExtra(GTASK_SERVICE_BROADCAST_PROGRESS_MSG, msg); + sendBroadcast(intent); //发送这个通知 + } + + public static void startSync(Activity activity) {//执行一个service,service的内容里的同步动作就是开始同步 + 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) {//执行一个service,service的内容里的同步动作就是取消同步 + 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; + } +}