From 11f40a0f51a1ba0379cbc5e2fa47d8545203b612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9C=E6=96=B9=E5=A4=95=E9=98=B3?= Date: Fri, 4 Nov 2022 16:19:52 +0800 Subject: [PATCH] =?UTF-8?q?android=20sdk=20=E7=9B=91=E5=90=AC=E5=99=A8?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=E4=BF=AE=E6=94=B9=E4=B8=BACopyOnWriteArrayLi?= =?UTF-8?q?st?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cim/sdk/android/CIMCacheManager.java | 9 +++++-- .../cim/sdk/android/CIMCacheProvider.java | 10 ++++---- .../cim/sdk/android/CIMListenerManager.java | 8 +++--- .../cim/sdk/android/CIMPushService.java | 25 ++++++++++--------- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMCacheManager.java b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMCacheManager.java index 43adefa..110aad1 100644 --- a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMCacheManager.java +++ b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMCacheManager.java @@ -53,6 +53,11 @@ class CIMCacheManager { public static final String CONTENT_URI = "content://%s.cim.provider"; + static final String COLUMN_KEY = "key"; + + static final String COLUMN_VALUE = "value"; + + public static void remove(Context context, String key) { ContentResolver resolver = context.getContentResolver(); @@ -63,8 +68,8 @@ class CIMCacheManager { ContentResolver resolver = context.getContentResolver(); ContentValues values = new ContentValues(); - values.put("value", value); - values.put("key", key); + values.put(COLUMN_KEY, key); + values.put(COLUMN_VALUE, value); resolver.insert(Uri.parse(String.format(CONTENT_URI, context.getPackageName())), values); } diff --git a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMCacheProvider.java b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMCacheProvider.java index 12f074d..3ca00ca 100644 --- a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMCacheProvider.java +++ b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMCacheProvider.java @@ -33,7 +33,7 @@ public class CIMCacheProvider extends ContentProvider { @Override public int delete(Uri arg0, String key, String[] arg2) { - getContext().getSharedPreferences(MODEL_KEY, Context.MODE_PRIVATE).edit().remove(key).apply(); + getContext().getSharedPreferences(MODEL_KEY, Context.MODE_PRIVATE).edit().remove(key).commit(); return 0; } @@ -44,9 +44,9 @@ public class CIMCacheProvider extends ContentProvider { @Override public Uri insert(Uri arg0, ContentValues values) { - String key = values.getAsString("key"); - String value = values.getAsString("value"); - getContext().getSharedPreferences(MODEL_KEY, Context.MODE_PRIVATE).edit().putString(key, value).apply(); + String key = values.getAsString(CIMCacheManager.COLUMN_KEY); + String value = values.getAsString(CIMCacheManager.COLUMN_VALUE); + getContext().getSharedPreferences(MODEL_KEY, Context.MODE_PRIVATE).edit().putString(key, value).commit(); return null; } @@ -57,7 +57,7 @@ public class CIMCacheProvider extends ContentProvider { @Override public Cursor query(Uri arg0, String[] arg1, String key, String[] arg3, String arg4) { - MatrixCursor cursor = new MatrixCursor(new String[]{"value"}); + MatrixCursor cursor = new MatrixCursor(new String[]{CIMCacheManager.COLUMN_VALUE}); String value = getContext().getSharedPreferences(MODEL_KEY, Context.MODE_PRIVATE).getString(arg1[0], null); cursor.addRow(new Object[]{value}); return cursor; diff --git a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMListenerManager.java b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMListenerManager.java index 8f0a4e2..f459f36 100644 --- a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMListenerManager.java +++ b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMListenerManager.java @@ -27,16 +27,16 @@ import com.farsunset.cim.sdk.android.model.Message; import com.farsunset.cim.sdk.android.model.ReplyBody; import com.farsunset.cim.sdk.android.model.SentBody; -import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; /** * CIM 消息监听器管理 */ public class CIMListenerManager { - private static final ArrayList cimListeners = new ArrayList<>(); + private static final List cimListeners = new CopyOnWriteArrayList<>(); private static final ReceiveComparator comparator = new ReceiveComparator(); private CIMListenerManager() { @@ -47,7 +47,7 @@ public class CIMListenerManager { if (!cimListeners.contains(listener)) { cimListeners.add(listener); - Collections.sort(cimListeners,comparator); + cimListeners.sort(comparator); } } diff --git a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushService.java b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushService.java index 6d8bd1b..1d598a7 100644 --- a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushService.java +++ b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushService.java @@ -118,9 +118,7 @@ public class CIMPushService extends Service { String action = newIntent.getAction(); - if (!persistHolder.get()) { - createTransientNotification(); - } + createTransientNotification(newIntent); if (ServiceAction.ACTION_CREATE_CIM_CONNECTION.equals(action)) { this.prepareConnect(newIntent.getLongExtra(BundleKey.KEY_DELAYED_TIME, 0)); @@ -221,10 +219,6 @@ public class CIMPushService extends Service { @Override public void onDestroy() { super.onDestroy(); - release(); - } - - private void release() { connectHandler.removeMessages(0); @@ -246,13 +240,18 @@ public class CIMPushService extends Service { } - private void createTransientNotification() { + private void createTransientNotification(Intent intent) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O || persistHolder.get()) { return; } + if (ServiceAction.ACTION_SHOW_PERSIST_NOTIFICATION.equals(intent.getAction()) + || ServiceAction.ACTION_HIDE_PERSIST_NOTIFICATION.equals(intent.getAction())) { + return; + } + if (notificationManager.getNotificationChannel(PERSIST_NTC_CHANNEL_ID) != null) { int icon = CIMCacheManager.getInt(this,CIMCacheManager.KEY_NTC_CHANNEL_ICON); @@ -272,11 +271,13 @@ public class CIMPushService extends Service { channel.enableVibration(false); channel.setSound(null, null); notificationManager.createNotificationChannel(channel); + + Notification notification = makeNotification(TRANSIENT_NTC_CHANNEL_ID,0,CIMPushService.class.getSimpleName(),null); + + startForeground(NOTIFICATION_ID, notification); + } - Notification notification = makeNotification(TRANSIENT_NTC_CHANNEL_ID,0,CIMPushService.class.getSimpleName(),null); - - startForeground(NOTIFICATION_ID, notification); }