ロックプロセスを破棄する方法

まれに、Storage.LevelDB エラーが原因で HERE SDK を使用するアプリケーションがクラッシュしたり、HERE SDK の初期化に失敗して failedToLockCacheFolder エラーが発生したりすることがあります。

これは、の 2 番目のインスタンス SDKNativeEngineaccess_key_id 既存のインスタンスと同じで作成された場合に発生することがあります。 次に、ローカルマップキャッシュディレクトリが現在のプロセスによってロックされます。

このロックされたキャッシュフォルダのクラッシュは、 HERE SDK を初期化する前に次のオプションを設定することで修正できます。

SDKOptions sdkOptions = SDKOptions.withAccessKeySecret(accessKeyId, accessKeySecret);
// Defaults to SDKOptions.ActionOnCacheLock.waitLockingAppFinish.
sdkOptions.actionOnCacheLock = SDKOptionsActionOnCacheLock.killLockingApp;


// Now, use these options to initialize the HERE SDK and destroy a locking process (if any).
try {
  await SDKNativeEngine.makeSharedInstance(sdkOptions);
} on InstantiationException {
  throw Exception("Failed to initialize the HERE SDK.");
}

キャッシュがロックされている場合は、ロックプロセスが終了し、アプリ は正常に起動します。 キャッシュのロックが発生していない場合、コードは HERE SDK のみを初期化します。 さらに killLockingApp、次の値も設定できます。

  • noAction: 何も行われません。
  • waitLockingAppFinish: アプリ は、ロック処理が終了するまで待機します。 これは決して起こらないことに注意してください。 これがデフォルトの動作です。

追加情報

または、次のスニペット を使用してキャッシュロックの問題を検出し、防止できます。 このフラグが設定されている場合、destroyLockingProcess()が内部的にmakeSharedInstance()を呼び出すため、これはkillLockingApp と同じ効果があります。しかし、より柔軟に使用できます。

// Check if there is a lock on the cache.
Integer processID = LockingProcess.getLockingProcessId(sdkOptions);
if (processID != null) {
    // Warning: The cache is locked.

    // This may kill another process that is trying to attempt to lock the current map cache.
    // If this happens, the method will try to gracefully repair the cache.
    // If no problem was detected, the method will do nothing.
    long maxTimeoutInMilliseconds = 300;
    LockingProcess.destroyLockingProcess(sdkOptions, maxTimeoutInMilliseconds);
}

// Now, proceed to initialize the HERE SDK.

getLockingProcessId() Android OS からロックプロセスのプロセス ID を提供します。 ロックが発生しなかっ nullた場合、メソッドはを返します。

電話すると destroyLockingProcess() 問題は解決します。 このコードを保持すると、アプリケーションの起動時に散発的に発生するクラッシュを解決できます。 キャッシュロックが検出されない場合 destroyLockingProcess() 、は何も行いません。

」に一致する結果は 件です

    」に一致する結果はありません