Как запустить плагины Cordova в фоновом режиме?

Я делаю приложение на основе телефонной связи (кордова). Я тестировал его несколько раз, и недавно я увидел сообщение в xcode, в котором говорилось: «Плагин должен использовать фоновый поток». Так можно ли заставить плагины Cordova работать в фоновом режиме? если да то подскажите как. Спасибо!


person Thomas M. Tveten    schedule 13.03.2014    source источник


Ответы (1)


Фоновый поток — это не то же самое, что выполнение кода, когда приложение находится в фоновом режиме, фоновый поток используется, чтобы не блокировать пользовательский интерфейс во время выполнения длительной задачи.

Пример фонового потока на iOS

- (void)myPluginMethod:(CDVInvokedUrlCommand*)command
    {
        // Check command.arguments here.
        [self.commandDelegate runInBackground:^{
            NSString* payload = nil;
            // Some blocking logic...
            CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:payload];
            // The sendPluginResult method is thread-safe.
            [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
        }];
    }

Пример фонового потока на андроиде

@Override
    public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
        if ("beep".equals(action)) {
            final long duration = args.getLong(0);
            cordova.getThreadPool().execute(new Runnable() {
                public void run() {
                    ...
                    callbackContext.success(); // Thread-safe.
                }
            });
            return true;
        }
        return false;
    }
person jcesarmobile    schedule 14.03.2014
comment
как? это собственный код плагина. я не понимаю твой вопрос - person jcesarmobile; 26.02.2015
comment
Да, я знаю, что это собственный код, который должен быть в файле .m. Мой вопрос в том, как использовать эту функцию, если я хочу запустить определенный плагин в фоновом режиме. - person developer; 27.02.2015
comment
это не для конкретного плагина в фоновом режиме, это для вашего собственного плагина, вы не можете запускать другие плагины в фоновом режиме, если у них нет этого кода, или вы разветвляете плагин и создаете свою собственную версию с этим фоновым кодом - person jcesarmobile; 27.02.2015
comment
Вы хотите сказать, что если я хочу, чтобы плагин работал в фоновом режиме, я должен отредактировать этот код и указать этот логин? - person developer; 27.02.2015
comment
Я имею в виду, что это нативный код для запуска в фоновом режиме. Если вы хотите, чтобы ваш плагин работал в фоновом режиме, ему нужна часть runInBackground (iOS) или cordova.getThreadPool().execute(new Runnable() (android). Если плагин не ваш, то автор должен добавить этот код ( если он хочет) или вы форкаете плагин и добавляете эти изменения. - person jcesarmobile; 27.02.2015
comment
@developer, на самом деле да, вы можете просто отредактировать код плагина, чтобы он работал. Но имейте в виду, что при обновлении плагина ваши изменения будут удалены. Поэтому для сохранения этого кода вам нужно сделать, как сказал jcesarmobile (попросите владельца плагина внести эти изменения или разветвить). - person extempl; 22.07.2015
comment
Этот ответ даже не близок к вопросу - person Varun Kumar; 20.08.2018
comment
@VarunKumar, как вы думаете, принятый ответ с 22 голосами даже не близок к вопросу? Ответ хороший. Вы и другой даунвотер ищете что-то отличное от того, о чем здесь спрашивают. Это не запуск плагинов, когда устройство находится в фоновом режиме, а запуск кода плагина в фоновом потоке, чтобы не блокировать пользовательский интерфейс во время выполнения кода. - person jcesarmobile; 20.08.2018