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

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

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

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

// Specify credentials and keep default cache path by setting an empty string.
SDKOptions sdkOptions = new SDKOptions("YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET", "");
// Defaults to SDKOptions.ActionOnCacheLock.WAIT_LOCKING_APP_FINISH.
sdkOptions.actionOnCacheLock = SDKOptions.ActionOnCacheLock.KILL_LOCKING_APP;

// Now, use these options to initialize the HERE SDK and destroy a locking process (if any).
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 と同じ効果があります。しかし、より柔軟に使用できます。

// 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() 、は何も行いません。

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

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