Mul*_*att 6 media plugins multithreading background cordova
我正在使用Phonegap 3和Media插件.在iOS上测试我的应用时,我一直收到这些错误:
THREAD WARNING: ['Media'] took '205.391846' ms. Plugin should use a background thread.
Run Code Online (Sandbox Code Playgroud)
我从phonegap文档(http://docs.phonegap.com/en/edge/guide_platforms_ios_plugin.md.html)中看到了这一点:
- (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];
}];
}
Run Code Online (Sandbox Code Playgroud)
这是否会进入我的应用程序,或者我是否需要为每个插件编辑它?我把它放在哪里?
我在网上看到了一些关于此的帖子,但没有一个明确回答如何使用上述代码.
ben*_*nka 11
就个人而言,我还没有使用Media插件,但要处理后台线程,你需要检查哪个调用导致了warning.
例如,如果在创建media对象时抛出此警告:
var my_media = new Media(src, onSuccess, onError);
Run Code Online (Sandbox Code Playgroud)
然后你可以检查插件.js文件(这是Media.js).查找函数Media并查找本机调用,在这种情况下:
exec(null, this.errorCallback, "Media", "create", [this.id, this.src]);
Run Code Online (Sandbox Code Playgroud)
由此你知道这是调用Media类的create方法.
所以去打开Media.m(或CDVSound.m在这个确切的情况下)并寻找create方法(你应该找到它cordova/plugins/org.apache.cordova.media/src/ios),结束封装整个方法:
[self.commandDelegate runInBackground:^{
// the create method goes here
}];
Run Code Online (Sandbox Code Playgroud)
这将为"本机"媒体创建创建后台线程.它应该如下所示:
- (void)create:(CDVInvokedUrlCommand*)command
{
[self.commandDelegate runInBackground:^{
NSString* mediaId = [command.arguments objectAtIndex:0];
NSString* resourcePath = [command.arguments objectAtIndex:1];
CDVAudioFile* audioFile = [self audioFileForResource:resourcePath withId:mediaId doValidation:NO forRecording:NO];
if (audioFile == nil) {
NSString* errorMessage = [NSString stringWithFormat:@"Failed to initialize Media file with path %@", resourcePath];
NSString* jsString = [NSString stringWithFormat:@"%@(\"%@\",%d,%@);", @"cordova.require('org.apache.cordova.media.Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode:MEDIA_ERR_ABORTED message:errorMessage]];
[self.commandDelegate evalJs:jsString];
} else {
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
}
}];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8888 次 |
| 最近记录: |