ロックプロセスを破棄する方法
まれに、Storage.LevelDB
エラーが原因で HERE SDK を使用するアプリケーションがクラッシュしたり、HERE SDK の初期化に失敗して FAILED_TO_LOCK_CACHE_FOLDER
エラーが発生したりすることがあります。
これは、の 2 番目のインスタンス SDKNativeEngine
が access_key_id
既存のインスタンスと同じで作成された場合に発生することがあります。 次に、ローカルマップキャッシュディレクトリが現在のプロセスによってロックされます。
このロックされたキャッシュフォルダのクラッシュは、 HERE SDK を初期化する前に次のオプションを設定することで修正できます。
SDKOptions sdkOptions = new SDKOptions("YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET", "");
sdkOptions.actionOnCacheLock = SDKOptions.ActionOnCacheLock.KILL_LOCKING_APP;
try {
SDKNativeEngine.makeSharedInstance(context, sdkOptions);
} catch (InstantiationErrorException e) {
throw new RuntimeException("Initialization of HERE SDK failed: " + e.error.name());
}
キャッシュがロックされている場合は、ロックプロセスが終了し、アプリ は正常に起動します。 キャッシュのロックが発生していない場合、コードは HERE SDK のみを初期化します。 さらに KILL_LOCKING_APP
、次の値も設定できます。
-
NO_ACTION
: 何も行われません。 -
WAIT_LOCKING_APP_FINISH
: アプリ は、ロック処理が終了するまで待機します。 これは決して起こらないことに注意してください。 これがデフォルトの動作です。
追加情報
または、次のスニペット を使用してキャッシュロックの問題を検出し、防止できます。 このフラグが設定されている場合、destroyLockingProcess()
が内部的にmakeSharedInstance()
を呼び出すため、これはKILL_LOCKING_APP
と同じ効果があります。しかし、より柔軟に使用できます。
Integer processID = LockingProcess.getLockingProcessId(sdkOptions);
if (processID != null) {
long maxTimeoutInMilliseconds = 300;
LockingProcess.destroyLockingProcess(sdkOptions, maxTimeoutInMilliseconds);
}
getLockingProcessId()
Android OS からロックプロセスのプロセス ID を提供します。 ロックが発生しなかっ null
た場合、メソッドはを返します。
destroyLockingProcess を呼び出すことで ) 問題は解決されます。 このコードを保持すると、アプリケーションの起動時に散発的に発生するクラッシュを解決できます。 キャッシュロックが検出されない場合 destroyLockingProcess()
、は何も行いません。