From 06ee7b30a7d5b52ddcefec48d9039617b43be4cc Mon Sep 17 00:00:00 2001 From: sarahzzhang <743855454@qq.com> Date: Fri, 2 Feb 2024 16:53:38 +0800 Subject: [PATCH 1/6] =?UTF-8?q?fix:=20networkChangeObservable=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E6=B3=A8=E5=86=8C=E5=A4=9A=E6=AC=A1=EF=BC=8C=E8=B6=85?= =?UTF-8?q?=E8=BF=87=E6=9C=80=E5=A4=A7=E9=99=90=E5=88=B6=E5=BC=95=E8=B5=B7?= =?UTF-8?q?crash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/tencent/msdk/dns/DnsService.java | 87 +++++++++-------- .../base/network/NetworkChangeManager.java | 11 ++- .../network/NetworkChangeObservableImpl.java | 20 ++-- .../NetworkChangeObservableV21Impl.java | 96 ++++++++++--------- 4 files changed, 115 insertions(+), 99 deletions(-) diff --git a/src/main/java/com/tencent/msdk/dns/DnsService.java b/src/main/java/com/tencent/msdk/dns/DnsService.java index 8796dfb..ea665d4 100644 --- a/src/main/java/com/tencent/msdk/dns/DnsService.java +++ b/src/main/java/com/tencent/msdk/dns/DnsService.java @@ -63,50 +63,53 @@ public static Context getAppContext() { * @throws IllegalArgumentException context为null时抛出 */ public static void init(Context context, /* @Nullable */DnsConfig config) { - // NOTE: 参数检查不封装为通用方法, 是为了避免不必要的concat执行 - if (null == context) { - throw new IllegalArgumentException("context".concat(Const.NULL_POINTER_TIPS)); - } - if (null == config) { - config = new DnsConfig.Builder().build(); - } - // NOTE: 在开始打日志之前设置日志开关 - DnsLog.setLogLevel(config.logLevel); - addLogNodes(config.logNodes); - DnsLog.v("DnsService.init(%s, %s) called, ver:%s", context, config, BuildConfig.VERSION_NAME); - Context appContext = context.getApplicationContext(); - sAppContext = appContext; - sConfig = config; - // 底层配置获取 - DnsExecutors.WORK.execute(new Runnable() { - @Override - public void run() { - ConfigFromServer.init(sConfig.lookupExtra, sConfig.channel); + try { + // NOTE: 参数检查不封装为通用方法, 是为了避免不必要的concat执行 + if (null == context) { + throw new IllegalArgumentException("context".concat(Const.NULL_POINTER_TIPS)); } - }); - // 初始化容灾服务 - BackupResolver.getInstance().init(sConfig); - // 初始化SpendHelper配置为正常上报做准备 - SpendReportResolver.getInstance().init(); - NetworkChangeManager.install(appContext); - ActivityLifecycleDetector.install(appContext); - // Room 本地数据读取 - DnsExecutors.WORK.execute(new Runnable() { - @Override - public void run() { - Cache.getInstance().readFromDb(); + if (null == config) { + config = new DnsConfig.Builder().build(); } - }); - ReportHelper.init(config); - DnsExecutors.sExecutorSupplier = sConfig.executorSupplier; - setLookedUpListener(config.lookedUpListener); - - // NOTE: addReporters需保证在ReportManager init之后调用 - addReporters(config.reporters); - - sInited = true; - - preLookupAndStartAsyncLookup(); + // NOTE: 在开始打日志之前设置日志开关 + DnsLog.setLogLevel(config.logLevel); + addLogNodes(config.logNodes); + DnsLog.v("DnsService.init(%s, %s) called, ver:%s", context, config, BuildConfig.VERSION_NAME); + Context appContext = context.getApplicationContext(); + sAppContext = appContext; + sConfig = config; + // 底层配置获取 + DnsExecutors.WORK.execute(new Runnable() { + @Override + public void run() { + ConfigFromServer.init(sConfig.lookupExtra, sConfig.channel); + } + }); + // 初始化容灾服务 + BackupResolver.getInstance().init(sConfig); + // 初始化SpendHelper配置为正常上报做准备 + SpendReportResolver.getInstance().init(); + NetworkChangeManager.install(appContext); + ActivityLifecycleDetector.install(appContext); + // Room 本地数据读取 + DnsExecutors.WORK.execute(new Runnable() { + @Override + public void run() { + Cache.getInstance().readFromDb(); + } + }); + ReportHelper.init(config); + DnsExecutors.sExecutorSupplier = sConfig.executorSupplier; + setLookedUpListener(config.lookedUpListener); + + // NOTE: addReporters需保证在ReportManager init之后调用 + addReporters(config.reporters); + + sInited = true; + preLookupAndStartAsyncLookup(); + } catch (Exception e) { + DnsLog.w("DnsService.init failed: %s", e); + } } /** diff --git a/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeManager.java b/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeManager.java index 5e77d65..f265d4b 100644 --- a/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeManager.java +++ b/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeManager.java @@ -6,16 +6,19 @@ public final class NetworkChangeManager { - private static INetworkChangeObservable sNetworkChangeObservable = null; + private volatile static INetworkChangeObservable sNetworkChangeObservable; public static void install(Context context) { if (null == context) { DnsLog.w("Install network change manager failed: context can not be null"); return; } - synchronized (NetworkChangeManager.class) { - if (null == sNetworkChangeObservable) { - sNetworkChangeObservable = new NetworkChangeObservableFactory().create(context); + if (null == sNetworkChangeObservable) { + synchronized (NetworkChangeManager.class) { + if (null == sNetworkChangeObservable) { + sNetworkChangeObservable = new NetworkChangeObservableFactory().create(context); + + } } } } diff --git a/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableImpl.java b/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableImpl.java index ac3514f..d02087f 100644 --- a/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableImpl.java +++ b/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableImpl.java @@ -6,6 +6,8 @@ import android.content.IntentFilter; import android.net.ConnectivityManager; +import com.tencent.msdk.dns.base.log.DnsLog; + final class NetworkChangeObservableImpl extends AbsNetworkChangeObservable { NetworkChangeObservableImpl(Context context) { @@ -14,13 +16,17 @@ final class NetworkChangeObservableImpl extends AbsNetworkChangeObservable { if (null == context) { return; } - final Context appContext = context.getApplicationContext(); - appContext.registerReceiver(new BroadcastReceiver() { + try { + final Context appContext = context.getApplicationContext(); + appContext.registerReceiver(new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - mayChangeNetwork(appContext); - } - }, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + @Override + public void onReceive(Context context, Intent intent) { + mayChangeNetwork(appContext); + } + }, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + } catch (Exception e){ + DnsLog.w("network register failed " + e); + } } } diff --git a/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableV21Impl.java b/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableV21Impl.java index 35b8f23..0b91ada 100644 --- a/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableV21Impl.java +++ b/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableV21Impl.java @@ -25,60 +25,64 @@ final class NetworkChangeObservableV21Impl extends AbsNetworkChangeObservable { if (null == connectivityManager) { return; } - NetworkRequest allNetworkRequest = - new NetworkRequest.Builder() - .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) - .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) - .addTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH) - .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) - .build(); - connectivityManager.registerNetworkCallback(allNetworkRequest, - new ConnectivityManager.NetworkCallback() { + try { + NetworkRequest allNetworkRequest = + new NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .addTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH) + .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) + .build(); + connectivityManager.registerNetworkCallback(allNetworkRequest, + new ConnectivityManager.NetworkCallback() { - // NOTE:存在一次切网多次调用的情况 - // NOTE: 当前不好确认只在回调onAvailable和onLost时驱动切网逻辑是否能覆盖所有切网情况, 日志记录所有回调时机方便后续定位问题 + // NOTE:存在一次切网多次调用的情况 + // NOTE: 当前不好确认只在回调onAvailable和onLost时驱动切网逻辑是否能覆盖所有切网情况, 日志记录所有回调时机方便后续定位问题 - @Override - public void onAvailable(Network network) { - super.onAvailable(network); - DnsLog.d("Network onAvailable(%s)", network); + @Override + public void onAvailable(Network network) { + super.onAvailable(network); + DnsLog.d("Network onAvailable(%s)", network); - mayChangeNetwork(appContext); - } + mayChangeNetwork(appContext); + } - @Override - public void onLosing(Network network, int maxMsToLive) { - super.onLosing(network, maxMsToLive); - DnsLog.d("Network onLosing(%s)", network); - } + @Override + public void onLosing(Network network, int maxMsToLive) { + super.onLosing(network, maxMsToLive); + DnsLog.d("Network onLosing(%s)", network); + } - @Override - public void onLost(Network network) { - super.onLost(network); - DnsLog.d("Network onLost(%s)", network); + @Override + public void onLost(Network network) { + super.onLost(network); + DnsLog.d("Network onLost(%s)", network); - mayChangeNetwork(appContext); - } + mayChangeNetwork(appContext); + } - @Override - public void onUnavailable() { - super.onUnavailable(); - DnsLog.d("Network onUnavailable"); - } + @Override + public void onUnavailable() { + super.onUnavailable(); + DnsLog.d("Network onUnavailable"); + } - @Override - public void onCapabilitiesChanged(Network network, - NetworkCapabilities networkCapabilities) { - super.onCapabilitiesChanged(network, networkCapabilities); - DnsLog.d("Network onCapabilitiesChanged(%s)", network); - } + @Override + public void onCapabilitiesChanged(Network network, + NetworkCapabilities networkCapabilities) { + super.onCapabilitiesChanged(network, networkCapabilities); + DnsLog.d("Network onCapabilitiesChanged(%s)", network); + } - @Override - public void onLinkPropertiesChanged(Network network, - LinkProperties linkProperties) { - super.onLinkPropertiesChanged(network, linkProperties); - DnsLog.d("Network onLinkPropertiesChanged(%s)", network); - } - }); + @Override + public void onLinkPropertiesChanged(Network network, + LinkProperties linkProperties) { + super.onLinkPropertiesChanged(network, linkProperties); + DnsLog.d("Network onLinkPropertiesChanged(%s)", network); + } + }); + } catch (Exception e) { + DnsLog.w("network register failed " + e); + } } } From 0a851df874de29a0b1018212ea666cd27bb6c6de Mon Sep 17 00:00:00 2001 From: sarahzzhang <743855454@qq.com> Date: Thu, 22 Feb 2024 17:30:40 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20sqlite=E5=AD=98=E5=82=A8=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../msdk/dns/core/cache/CacheDbHelper.java | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 src/main/java/com/tencent/msdk/dns/core/cache/CacheDbHelper.java diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/CacheDbHelper.java b/src/main/java/com/tencent/msdk/dns/core/cache/CacheDbHelper.java new file mode 100644 index 0000000..0bf092a --- /dev/null +++ b/src/main/java/com/tencent/msdk/dns/core/cache/CacheDbHelper.java @@ -0,0 +1,180 @@ +package com.tencent.msdk.dns.core.cache; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import com.tencent.msdk.dns.base.log.DnsLog; +import com.tencent.msdk.dns.core.cache.database.LookupCache; +import com.tencent.msdk.dns.core.cache.database.LookupResultConverter; + +import java.util.ArrayList; +import java.util.List; + +public class CacheDbHelper extends SQLiteOpenHelper { + public static final int DATABASE_VERSION = 1; + + public static final String DATABASE_NAME = "LookupCache.db"; + + private SQLiteDatabase mDb; + + private final Object mLock = new Object(); + + static class DB { + static final String TABLE_NAME = "lookupDB"; + + static final String HOST = "host"; + + static final String RESULT = "result"; + + static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + DB.TABLE_NAME + " (" + + HOST + " TEXT PRIMARY KEY," + + RESULT + " TEXT)"; + + static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + TABLE_NAME; + } + + public CacheDbHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + private SQLiteDatabase getDb() { + if (mDb == null) { + try{ + mDb = getWritableDatabase(); + } catch (Exception e){ + + } + } + return mDb; + } + + public List readFromDb() { + synchronized (mLock) { + ArrayList lists = new ArrayList<>(); + + SQLiteDatabase db = null; + Cursor cursor = null; + + try { + db = getDb(); + cursor = db.query(DB.TABLE_NAME, null, null, null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + cursor.moveToFirst(); + do { + DnsLog.d("testt----" + cursor.getString(cursor.getColumnIndex(DB.HOST))+ "result ---" + LookupResultConverter.toLookupResult(cursor.getBlob(cursor.getColumnIndex(DB.RESULT)))); + lists.add(new LookupCache( + cursor.getString(cursor.getColumnIndex(DB.HOST)), + LookupResultConverter.toLookupResult(cursor.getBlob(cursor.getColumnIndex(DB.RESULT))) + )); + } while (cursor.moveToNext()); + } + } catch (Exception e) { + DnsLog.e("read from db fail " + e); + } finally { + try { + if (cursor != null) { + cursor.close(); + } + } catch (Exception ignored) { + } + } + return lists; + } + } + + public void insertLookupCache(LookupCache lookupCache) { + synchronized (mLock) { + SQLiteDatabase db = null; + try { + db = getDb(); + db.beginTransaction(); + ContentValues cv = new ContentValues(); + cv.put(DB.HOST, lookupCache.hostname); + cv.put(DB.RESULT, LookupResultConverter.fromLookupResult(lookupCache.lookupResult)); + db.insert(DB.TABLE_NAME, null, cv); + db.setTransactionSuccessful(); + } catch (Exception e) { + DnsLog.e("insert lookupCache fail " + e); + } finally { + if (db != null) { + try { + db.endTransaction(); + } catch (Exception ignored) { + } + } + } + } + } + + public void deleteLookupCaches(ArrayList lookupCaches) { + for(LookupCache lookupCache: lookupCaches) { + delete(lookupCache.hostname); + } + } + + public void delete(String hostname) { + synchronized (mLock) { + SQLiteDatabase db = null; + try { + db = getDb(); + db.beginTransaction(); + db.delete(DB.TABLE_NAME, DB.HOST + "= ? ", new String[] {hostname}); + db.setTransactionSuccessful(); + } catch (Exception e) { + DnsLog.e("delete by hostname fail" + e); + } finally { + if (db != null) { + try { + db.endTransaction(); + } catch (Exception ignored) { + } + } + } + } + } + + public void clear() { + synchronized (mLock) { + SQLiteDatabase db = null; + try { + db = getDb(); + db.beginTransaction(); + db.delete(DB.TABLE_NAME, null, null); + db.setTransactionSuccessful(); + } catch (Exception e) { + DnsLog.e("clear cache fail" + e); + } finally { + if (db != null) { + try { + db.endTransaction(); + } catch (Exception ignored) { + } + } + } + } + } + + @Override + public void onCreate(SQLiteDatabase db) { + try { + db.execSQL(DB.SQL_CREATE_ENTRIES); + }catch (Exception e) { + DnsLog.e("create db fail " + e); + } + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + if (oldVersion != newVersion) { + try { + db.execSQL(DB.SQL_DELETE_ENTRIES); + onCreate(db); + } catch (Exception e) { + DnsLog.e("upgrade db fail " + e); + } + } + } +} From 7474bbe76fb5ea2377f201321e5982e2bf0e9d5e Mon Sep 17 00:00:00 2001 From: sarahzzhang <743855454@qq.com> Date: Fri, 23 Feb 2024 11:36:42 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20=E4=B8=8B=E7=BA=BF=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E4=BE=9D=E8=B5=96=E5=BA=93room=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8sqlite=E8=BF=9B=E8=A1=8C=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 +-- .../java/com/tencent/msdk/dns/DnsService.java | 4 --- .../tencent/msdk/dns/core/cache/Cache.java | 16 ++++----- .../dns/core/cache/database/LookupCache.java | 7 ---- .../core/cache/database/LookupCacheDao.java | 35 ------------------- .../cache/database/LookupCacheDatabase.java | 31 ---------------- .../cache/database/LookupResultConverter.java | 8 ++--- 7 files changed, 11 insertions(+), 94 deletions(-) delete mode 100644 src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCacheDao.java delete mode 100644 src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCacheDatabase.java diff --git a/build.gradle b/build.gradle index 192cf92..266d454 100644 --- a/build.gradle +++ b/build.gradle @@ -99,8 +99,8 @@ dependencies { androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - implementation 'androidx.room:room-runtime:2.2.0' - annotationProcessor 'androidx.room:room-compiler:2.2.0' +// implementation 'androidx.room:room-runtime:2.2.0' +// annotationProcessor 'androidx.room:room-compiler:2.2.0' doclava 'com.google.doclava:doclava:1.0.6' } diff --git a/src/main/java/com/tencent/msdk/dns/DnsService.java b/src/main/java/com/tencent/msdk/dns/DnsService.java index ea665d4..beb329a 100644 --- a/src/main/java/com/tencent/msdk/dns/DnsService.java +++ b/src/main/java/com/tencent/msdk/dns/DnsService.java @@ -23,7 +23,6 @@ import com.tencent.msdk.dns.core.LookupParameters; import com.tencent.msdk.dns.core.LookupResult; import com.tencent.msdk.dns.core.cache.Cache; -import com.tencent.msdk.dns.core.cache.database.LookupCacheDatabase; import com.tencent.msdk.dns.core.rest.share.LookupExtra; import com.tencent.msdk.dns.core.stat.StatisticsMerge; import com.tencent.msdk.dns.report.CacheStatisticsReport; @@ -166,9 +165,6 @@ public static synchronized void setCachedIpEnable(boolean mCachedIpEnable) { throw new IllegalStateException("DnsService".concat(Const.NOT_INIT_TIPS)); } sConfig.cachedIpEnable = mCachedIpEnable; - if (mCachedIpEnable) { - LookupCacheDatabase.creat(sAppContext); - } } /** diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/Cache.java b/src/main/java/com/tencent/msdk/dns/core/cache/Cache.java index dc886e8..7bac4eb 100644 --- a/src/main/java/com/tencent/msdk/dns/core/cache/Cache.java +++ b/src/main/java/com/tencent/msdk/dns/core/cache/Cache.java @@ -7,9 +7,8 @@ import com.tencent.msdk.dns.core.Const; import com.tencent.msdk.dns.core.ICache; import com.tencent.msdk.dns.core.LookupResult; +import com.tencent.msdk.dns.core.cache.database.CacheDbHelper; import com.tencent.msdk.dns.core.cache.database.LookupCache; -import com.tencent.msdk.dns.core.cache.database.LookupCacheDao; -import com.tencent.msdk.dns.core.cache.database.LookupCacheDatabase; import java.util.ArrayList; import java.util.List; @@ -20,8 +19,7 @@ public final class Cache implements ICache { private final Map mHostnameIpsMap = new ConcurrentHashMap<>(); - private final LookupCacheDao lookupCacheDao = - LookupCacheDatabase.getInstance(DnsService.getAppContext()).lookupCacheDao(); + private final CacheDbHelper cacheDbHelper = new CacheDbHelper(DnsService.getContext()); private boolean getCachedIpEnable() { return DnsService.getDnsConfig().cachedIpEnable; @@ -40,7 +38,7 @@ public static Cache getInstance() { public void readFromDb() { if (getCachedIpEnable()) { - List allCache = lookupCacheDao.getAll(); + List allCache = cacheDbHelper.getAll(); ArrayList expired = new ArrayList<>(); for (LookupCache lookupCache : allCache) { mHostnameIpsMap.put(lookupCache.hostname, lookupCache.lookupResult); @@ -50,7 +48,7 @@ public void readFromDb() { } } // 内存读取后,清空本地已过期的缓存 - lookupCacheDao.deleteLookupCaches(expired); + cacheDbHelper.deleteLookupCaches(expired); } } @@ -90,7 +88,7 @@ public void add(String hostname, LookupResult lookupResult) { DnsLog.d("Cache %s for %s", lookupResult, hostname); mHostnameIpsMap.put(hostname, lookupResult); if (getCachedIpEnable()) { - lookupCacheDao.insertLookupCache(new LookupCache(hostname, lookupResult)); + cacheDbHelper.insertLookupCache(new LookupCache(hostname, lookupResult)); } } @@ -103,7 +101,7 @@ public void delete(String hostname) { mHostnameIpsMap.remove(hostname); if (getCachedIpEnable()) { - lookupCacheDao.delete(hostname); + cacheDbHelper.delete(hostname); } } @@ -113,7 +111,7 @@ public void clear() { mHostnameIpsMap.clear(); if (getCachedIpEnable()) { - lookupCacheDao.clear(); + cacheDbHelper.clear(); } } } diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCache.java b/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCache.java index 6edb258..881aff1 100644 --- a/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCache.java +++ b/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCache.java @@ -3,20 +3,13 @@ import android.os.SystemClock; import androidx.annotation.NonNull; -import androidx.room.ColumnInfo; -import androidx.room.Entity; -import androidx.room.PrimaryKey; import com.tencent.msdk.dns.core.LookupResult; import com.tencent.msdk.dns.core.rest.share.AbsRestDns; -@Entity public class LookupCache { - @PrimaryKey - @NonNull public String hostname; - @ColumnInfo public LookupResult lookupResult; public LookupCache(@NonNull String mHostname, LookupResult mLookupResult) { diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCacheDao.java b/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCacheDao.java deleted file mode 100644 index a98bce1..0000000 --- a/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCacheDao.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.tencent.msdk.dns.core.cache.database; - -import androidx.room.Dao; -import androidx.room.Delete; -import androidx.room.Insert; -import androidx.room.OnConflictStrategy; -import androidx.room.Query; -import androidx.room.Update; - -import java.util.ArrayList; -import java.util.List; - -@Dao -public interface LookupCacheDao { - @Query("Select * from lookupcache") - List getAll(); - - @Query("Select * from lookupcache where hostname = :hostname") - LookupCache get(String hostname); - - @Insert(onConflict = OnConflictStrategy.REPLACE) - void insertLookupCache(LookupCache lookupCache); - - @Update - void updateLookupCache(LookupCache lookupCache); - - @Delete - void deleteLookupCaches(ArrayList lookupCaches); - - @Query("delete from lookupcache where hostname = :hostname") - void delete(String hostname); - - @Query("delete from lookupcache") - void clear(); -} diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCacheDatabase.java b/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCacheDatabase.java deleted file mode 100644 index 96226d5..0000000 --- a/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCacheDatabase.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.tencent.msdk.dns.core.cache.database; - -import android.content.Context; - -import androidx.room.Database; -import androidx.room.Room; -import androidx.room.RoomDatabase; -import androidx.room.TypeConverters; - -@Database(entities = {LookupCache.class}, version = 2, exportSchema = false) -@TypeConverters(LookupResultConverter.class) -public abstract class LookupCacheDatabase extends RoomDatabase { - private static final String DB_NAME = "lookup_result_db"; - - private static LookupCacheDatabase instance; - - public abstract LookupCacheDao lookupCacheDao(); - - public static synchronized LookupCacheDatabase getInstance(Context context) { - if (instance == null) { - creat(context); - } - return instance; - } - - public static void creat(Context context) { - instance = Room.databaseBuilder(context.getApplicationContext(), LookupCacheDatabase.class, DB_NAME) - .fallbackToDestructiveMigration() - .build(); - } -} diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupResultConverter.java b/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupResultConverter.java index b88868b..416008d 100644 --- a/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupResultConverter.java +++ b/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupResultConverter.java @@ -1,7 +1,5 @@ package com.tencent.msdk.dns.core.cache.database; -import androidx.room.TypeConverter; - import com.tencent.msdk.dns.core.LookupResult; import com.tencent.msdk.dns.core.rest.share.AbsRestDns; @@ -12,8 +10,7 @@ import java.io.ObjectOutputStream; public class LookupResultConverter { - @TypeConverter - public byte[] fromLookupResult(LookupResult lookupResult) { + public static byte[] fromLookupResult(LookupResult lookupResult) { ByteArrayOutputStream baos = null; ObjectOutputStream oos = null; try { @@ -39,8 +36,7 @@ public byte[] fromLookupResult(LookupResult lookupResult) { return baos.toByteArray(); } - @TypeConverter - public LookupResult toLookupResult(byte[] lookupResultByteArr) { + public static LookupResult toLookupResult(byte[] lookupResultByteArr) { ByteArrayInputStream bais = null; ObjectInputStream ois = null; try { From b558d6725dc27da322492af2b5e26dd79d82ef25 Mon Sep 17 00:00:00 2001 From: sarahzzhang <743855454@qq.com> Date: Fri, 23 Feb 2024 18:20:15 +0800 Subject: [PATCH 4/6] =?UTF-8?q?feat:=20sql=E8=B0=83=E6=95=B4&=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tencent/msdk/dns/core/cache/Cache.java | 9 +-- .../cache/{ => database}/CacheDbHelper.java | 66 +++++++++---------- .../dns/core/cache/database/LookupCache.java | 3 - .../com/tencent/msdk/dns/report/Session.java | 3 - 4 files changed, 38 insertions(+), 43 deletions(-) rename src/main/java/com/tencent/msdk/dns/core/cache/{ => database}/CacheDbHelper.java (75%) diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/Cache.java b/src/main/java/com/tencent/msdk/dns/core/cache/Cache.java index 7bac4eb..c4b4380 100644 --- a/src/main/java/com/tencent/msdk/dns/core/cache/Cache.java +++ b/src/main/java/com/tencent/msdk/dns/core/cache/Cache.java @@ -39,16 +39,17 @@ public static Cache getInstance() { public void readFromDb() { if (getCachedIpEnable()) { List allCache = cacheDbHelper.getAll(); - ArrayList expired = new ArrayList<>(); + ArrayList expiredList = new ArrayList<>(); for (LookupCache lookupCache : allCache) { mHostnameIpsMap.put(lookupCache.hostname, lookupCache.lookupResult); if (lookupCache.isExpired()) { - expired.add(lookupCache); + expiredList.add(lookupCache.hostname); } } + String [] expiredHosts = expiredList.toArray(new String[expiredList.size()]); // 内存读取后,清空本地已过期的缓存 - cacheDbHelper.deleteLookupCaches(expired); + cacheDbHelper.delete(expiredHosts); } } @@ -88,7 +89,7 @@ public void add(String hostname, LookupResult lookupResult) { DnsLog.d("Cache %s for %s", lookupResult, hostname); mHostnameIpsMap.put(hostname, lookupResult); if (getCachedIpEnable()) { - cacheDbHelper.insertLookupCache(new LookupCache(hostname, lookupResult)); + cacheDbHelper.insert(new LookupCache(hostname, lookupResult)); } } diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/CacheDbHelper.java b/src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java similarity index 75% rename from src/main/java/com/tencent/msdk/dns/core/cache/CacheDbHelper.java rename to src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java index 0bf092a..53180ea 100644 --- a/src/main/java/com/tencent/msdk/dns/core/cache/CacheDbHelper.java +++ b/src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java @@ -1,26 +1,26 @@ -package com.tencent.msdk.dns.core.cache; +package com.tencent.msdk.dns.core.cache.database; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; +import android.text.TextUtils; import com.tencent.msdk.dns.base.log.DnsLog; -import com.tencent.msdk.dns.core.cache.database.LookupCache; -import com.tencent.msdk.dns.core.cache.database.LookupResultConverter; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class CacheDbHelper extends SQLiteOpenHelper { public static final int DATABASE_VERSION = 1; - public static final String DATABASE_NAME = "LookupCache.db"; + public static final String DATABASE_NAME = "LookupResult.db"; - private SQLiteDatabase mDb; + private static final Object mLock = new Object(); - private final Object mLock = new Object(); + private SQLiteDatabase mDb; static class DB { static final String TABLE_NAME = "lookupDB"; @@ -42,19 +42,18 @@ public CacheDbHelper(Context context) { private SQLiteDatabase getDb() { if (mDb == null) { - try{ + try { mDb = getWritableDatabase(); - } catch (Exception e){ + } catch (Exception e) { } } return mDb; } - public List readFromDb() { + public List getAll() { synchronized (mLock) { ArrayList lists = new ArrayList<>(); - SQLiteDatabase db = null; Cursor cursor = null; @@ -64,7 +63,6 @@ public List readFromDb() { if (cursor != null && cursor.getCount() > 0) { cursor.moveToFirst(); do { - DnsLog.d("testt----" + cursor.getString(cursor.getColumnIndex(DB.HOST))+ "result ---" + LookupResultConverter.toLookupResult(cursor.getBlob(cursor.getColumnIndex(DB.RESULT)))); lists.add(new LookupCache( cursor.getString(cursor.getColumnIndex(DB.HOST)), LookupResultConverter.toLookupResult(cursor.getBlob(cursor.getColumnIndex(DB.RESULT))) @@ -85,7 +83,7 @@ public List readFromDb() { } } - public void insertLookupCache(LookupCache lookupCache) { + public void insert(LookupCache lookupCache) { synchronized (mLock) { SQLiteDatabase db = null; try { @@ -94,7 +92,7 @@ public void insertLookupCache(LookupCache lookupCache) { ContentValues cv = new ContentValues(); cv.put(DB.HOST, lookupCache.hostname); cv.put(DB.RESULT, LookupResultConverter.fromLookupResult(lookupCache.lookupResult)); - db.insert(DB.TABLE_NAME, null, cv); + db.insertWithOnConflict(DB.TABLE_NAME, null, cv, SQLiteDatabase.CONFLICT_REPLACE); db.setTransactionSuccessful(); } catch (Exception e) { DnsLog.e("insert lookupCache fail " + e); @@ -109,27 +107,29 @@ public void insertLookupCache(LookupCache lookupCache) { } } - public void deleteLookupCaches(ArrayList lookupCaches) { - for(LookupCache lookupCache: lookupCaches) { - delete(lookupCache.hostname); - } + public void delete(String hostname) { + delete(new String[]{hostname}); } - public void delete(String hostname) { - synchronized (mLock) { - SQLiteDatabase db = null; - try { - db = getDb(); - db.beginTransaction(); - db.delete(DB.TABLE_NAME, DB.HOST + "= ? ", new String[] {hostname}); - db.setTransactionSuccessful(); - } catch (Exception e) { - DnsLog.e("delete by hostname fail" + e); - } finally { - if (db != null) { - try { - db.endTransaction(); - } catch (Exception ignored) { + public void delete(String[] hosts) { + if (hosts.length > 0) { + synchronized (mLock) { + SQLiteDatabase db = null; + try { + db = getDb(); + db.beginTransaction(); + db.delete(DB.TABLE_NAME, DB.HOST + " IN (" + TextUtils.join(",", Collections.nCopies(hosts.length, + "?")) + ")", + hosts); + db.setTransactionSuccessful(); + } catch (Exception e) { + DnsLog.e("delete by hostname fail" + e); + } finally { + if (db != null) { + try { + db.endTransaction(); + } catch (Exception ignored) { + } } } } @@ -161,7 +161,7 @@ public void clear() { public void onCreate(SQLiteDatabase db) { try { db.execSQL(DB.SQL_CREATE_ENTRIES); - }catch (Exception e) { + } catch (Exception e) { DnsLog.e("create db fail " + e); } } diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCache.java b/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCache.java index 881aff1..d81a612 100644 --- a/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCache.java +++ b/src/main/java/com/tencent/msdk/dns/core/cache/database/LookupCache.java @@ -17,9 +17,6 @@ public LookupCache(@NonNull String mHostname, LookupResult mLookupResult) { this.lookupResult = mLookupResult; } - public LookupCache() { - } - public boolean isExpired() { AbsRestDns.Statistics stat = (AbsRestDns.Statistics) lookupResult.stat; if (stat != null) { diff --git a/src/main/java/com/tencent/msdk/dns/report/Session.java b/src/main/java/com/tencent/msdk/dns/report/Session.java index b132df6..962e909 100644 --- a/src/main/java/com/tencent/msdk/dns/report/Session.java +++ b/src/main/java/com/tencent/msdk/dns/report/Session.java @@ -1,7 +1,5 @@ package com.tencent.msdk.dns.report; -import com.tencent.msdk.dns.base.log.DnsLog; - import java.util.Random; public class Session { @@ -15,7 +13,6 @@ public static void setSessionId() { buf[i] = sampleAlphabet.charAt(random.nextInt(sampleAlphabet.length())); } sessionId = new String(buf); - DnsLog.d("hello sessionId: " + sessionId); } public static String getSessionId() { From fc2f16ad103e0b0d3a5fd14a39a4c82569f37645 Mon Sep 17 00:00:00 2001 From: sarahzzhang Date: Wed, 13 Mar 2024 15:25:01 +0800 Subject: [PATCH 5/6] =?UTF-8?q?fix:=20=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E4=B8=8E=E8=A7=84=E8=8C=83=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 ---- .../msdk/dns/base/network/NetworkChangeManager.java | 2 +- .../base/network/NetworkChangeObservableImpl.java | 2 +- .../msdk/dns/core/cache/database/CacheDbHelper.java | 13 ++++++++----- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 266d454..9c04f04 100644 --- a/build.gradle +++ b/build.gradle @@ -94,14 +94,10 @@ configurations { dependencies { implementation 'androidx.annotation:annotation:1.1.0' -// implementation files('libs/beacon-android-release-3.1.2-cover.jar') testImplementation 'junit:junit:4.12' androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', { exclude group: 'com.android.support', module: 'support-annotations' }) -// implementation 'androidx.room:room-runtime:2.2.0' -// annotationProcessor 'androidx.room:room-compiler:2.2.0' - doclava 'com.google.doclava:doclava:1.0.6' } diff --git a/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeManager.java b/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeManager.java index f265d4b..652047f 100644 --- a/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeManager.java +++ b/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeManager.java @@ -6,7 +6,7 @@ public final class NetworkChangeManager { - private volatile static INetworkChangeObservable sNetworkChangeObservable; + private static volatile INetworkChangeObservable sNetworkChangeObservable; public static void install(Context context) { if (null == context) { diff --git a/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableImpl.java b/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableImpl.java index d02087f..6652db7 100644 --- a/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableImpl.java +++ b/src/main/java/com/tencent/msdk/dns/base/network/NetworkChangeObservableImpl.java @@ -25,7 +25,7 @@ public void onReceive(Context context, Intent intent) { mayChangeNetwork(appContext); } }, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); - } catch (Exception e){ + } catch (Exception e) { DnsLog.w("network register failed " + e); } } diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java b/src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java index 53180ea..d61c424 100644 --- a/src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java +++ b/src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java @@ -45,7 +45,7 @@ private SQLiteDatabase getDb() { try { mDb = getWritableDatabase(); } catch (Exception e) { - + DnsLog.e("get db error " + e); } } return mDb; @@ -54,7 +54,7 @@ private SQLiteDatabase getDb() { public List getAll() { synchronized (mLock) { ArrayList lists = new ArrayList<>(); - SQLiteDatabase db = null; + SQLiteDatabase db; Cursor cursor = null; try { @@ -76,7 +76,8 @@ public List getAll() { if (cursor != null) { cursor.close(); } - } catch (Exception ignored) { + } catch (Exception e) { + DnsLog.e("cursor close error " + e); } } return lists; @@ -100,7 +101,8 @@ public void insert(LookupCache lookupCache) { if (db != null) { try { db.endTransaction(); - } catch (Exception ignored) { + } catch (Exception e) { + DnsLog.e("db end transaction error " + e); } } } @@ -128,7 +130,8 @@ public void delete(String[] hosts) { if (db != null) { try { db.endTransaction(); - } catch (Exception ignored) { + } catch (Exception e) { + DnsLog.e("db end transaction error " + e); } } } From 61dc596ccbef456f0104640d5ac342259a2cd7d1 Mon Sep 17 00:00:00 2001 From: sarahzzhang Date: Wed, 13 Mar 2024 15:37:00 +0800 Subject: [PATCH 6/6] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0catch=20error?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tencent/msdk/dns/core/cache/database/CacheDbHelper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java b/src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java index d61c424..d86a519 100644 --- a/src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java +++ b/src/main/java/com/tencent/msdk/dns/core/cache/database/CacheDbHelper.java @@ -153,7 +153,8 @@ public void clear() { if (db != null) { try { db.endTransaction(); - } catch (Exception ignored) { + } catch (Exception e) { + DnsLog.e("db end transaction error " + e); } } }