4

javascript バックグラウンド タスクでアプリから indexeddb にアクセスしようとしています (ライブ タイルを更新できるようにするため)。

私は次のようにタスクを設定しています:

        var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();
        builder.name = taskName;
        builder.taskEntryPoint = "js\\task\\backgroundTask.js";

        //Run every 8 hours if the device is on AC power
        var trigger = new Windows.ApplicationModel.Background.MaintenanceTrigger(480, false);
        builder.setTrigger(trigger);

        var task = builder.register();

タスクは次のようになります。

(function () {
    "use strict";

    var backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;
    var cancel = false;

    function doWork() {
        var key = null, settings = Windows.Storage.ApplicationData.current.localSettings;

        //todo access db and update tile

        close();
    }

    if (!cancel) {
        doWork();
    } else {
        close();
    }

    function onCanceled(cancelSender, cancelReason) {
        cancel = true;
    }

    backgroundTaskInstance.addEventListener("canceled", onCanceled);

})();

タスクは正常に動作しているようですが、データベース (またはアプリのリソース) にアクセスできるかどうかはわかりません。もしそうなら、私は何を逃したのですか?

4

3 に答える 3

4

http://msdn.microsoft.com/en-us/library/windows/apps/hh453270.aspxによると、ストア アプリの WorkerGlobalScope は、バックグラウンド タスクを実行しているときに有効になり、indexedDB を利用できるようにします。IndexedDB はローカルの appdata 内で動作するため、他の appdata 操作と同じように使用できます。

一般的に言えば、バックグラウンド タスクはアプリ データを変更し、タイル/トースト/バッジの更新を発行できます。Slace が指摘しているように、他のアプリ リソースにアクセスすることはできないため、appdata はメイン アプリとデータを共有する方法です。

于 2012-11-01T17:16:23.357 に答える
0

バックグラウンド タスクは異なるスレッドで実行され (同じトゥームストーン制限がないように)、アプリケーション リソースにアクセスできないと思います。これにより、アプリケーションが中断されている場合でもバックグラウンド タスクが維持され、アプリケーション リソースにアクセスできなくなります。

于 2012-11-01T12:01:05.093 に答える
0

ワーカー内で IndexedDB API を使用できますが、同期 APIを使用する必要があります。

Windows 8 開発のワーカーに関する私の経験では、内部で非同期 API を使用することはできません。非同期呼び出しを行う場合、提供されたコールバックは呼び出されません。また、Kraig が述べたように、worker スコープからアクセスできる API のみを使用できます。(window オブジェクトからは何も呼び出せません。)

于 2012-11-01T20:33:31.217 に答える