×
Namespaces

Variants
Actions
(Difference between revisions)

Chamadas síncronas e assíncronas da API de serviços do WRT

From Nokia Developer Wiki
Jump to: navigation, search
hamishwillee (Talk | contribs)
m (Hamishwillee - Bot fixing redirect link)
hamishwillee (Talk | contribs)
m (Hamishwillee - Bot update - Fix ArticleMetaData)
 
(4 intermediate revisions by one user not shown)
Line 1: Line 1:
[[Category:Lang-PT]][[Category:Widgets_(Português)]][[Category:S60_(Português)]]
+
{{ArticleMetaData <!-- v1.2 -->
Original: [[WRT Service API Synchronous and Asynchronous calls]]
+
|sourcecode= <!-- Link to example source code e.g. [[Media:The Code Example ZIP.zip]] -->
 +
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
 +
|devices= <!-- Devices tested against - e.g. ''devices=Nokia 6131 NFC, Nokia C7-00'') -->
 +
|sdk= <!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) -->
 +
|platform= <!-- Compatible platforms - e.g. Symbian^1 and later, Qt 4.6 and later -->
 +
|devicecompatability= <!-- Compatible devices e.g.: All* (must have internal GPS) -->
 +
|dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 -->
 +
|signing= <!-- Signing requirements - empty or one of: Self-Signed, DevCert, Manufacturer -->
 +
|capabilities= <!-- Capabilities required by the article/code example (e.g. Location, NetworkServices. -->
 +
|keywords= <!-- APIs, classes and methods (e.g. QSystemScreenSaver, QList, CBase -->
 +
|language= Lang-Portuguese
 +
|translated-by= [[User:Ivocalado]]
 +
|translated-from-title= WRT Service API Synchronous and Asynchronous calls
 +
|translated-from-id= 39237
 +
|review-by= <!-- After re-review: [[User:username]] -->
 +
|review-timestamp= <!-- After re-review: YYYYMMDD -->
 +
|update-by= <!-- After significant update: [[User:username]]-->
 +
|update-timestamp= <!-- After significant update: YYYYMMDD -->
 +
|creationdate= 20090926
 +
|author= [[User:Jappit]]
 +
}}[[Category:Lang-Portuguese]][[Category:Symbian Web Runtime]][[Category:Symbian]]
  
 
Ao trabalhar com a [http://www.developer.nokia.com/Resources/Library/Web/?content=GUID-65AAF569-D347-462B-B59A-9D7CA184AB9C.html API de serviços WRT], em geral é possível escolher entre versões '''síncronas''' e '''assíncronas''' para o mesmo método. Isto permite ter a mesma funcionalidade numa aplicação porém com um impacto ligeiramente diferente para o restante do seu código.
 
Ao trabalhar com a [http://www.developer.nokia.com/Resources/Library/Web/?content=GUID-65AAF569-D347-462B-B59A-9D7CA184AB9C.html API de serviços WRT], em geral é possível escolher entre versões '''síncronas''' e '''assíncronas''' para o mesmo método. Isto permite ter a mesma funcionalidade numa aplicação porém com um impacto ligeiramente diferente para o restante do seu código.
Line 122: Line 142:
 
==Leituras complementares==
 
==Leituras complementares==
 
* [http://www.developer.nokia.com/Resources/Library/Web/?content=GUID-65AAF569-D347-462B-B59A-9D7CA184AB9C.html WRT Service API reference]
 
* [http://www.developer.nokia.com/Resources/Library/Web/?content=GUID-65AAF569-D347-462B-B59A-9D7CA184AB9C.html WRT Service API reference]
* [[::Category:Web_Runtime_(WRT)|Web Runtime Wiki section]]
+
* [[::Category:Web Runtime (WRT)|Web Runtime Wiki section]]
 
* [http://www.developer.nokia.com/Develop/ Web Runtime technology landing page]
 
* [http://www.developer.nokia.com/Develop/ Web Runtime technology landing page]
 +
<!-- Translation --> [[en:WRT Service API Synchronous and Asynchronous calls]]

Latest revision as of 08:29, 1 August 2012

Article Metadata

Compatibilidade
Plataforma(s):
Symbian

Artigo
Tradução:
Por ivocalado
Última alteração feita por hamishwillee em 01 Aug 2012

Ao trabalhar com a API de serviços WRT, em geral é possível escolher entre versões síncronas e assíncronas para o mesmo método. Isto permite ter a mesma funcionalidade numa aplicação porém com um impacto ligeiramente diferente para o restante do seu código.

Este artigo descreve como manipular chamadas síncronas e assíncronas e explica quando cada tipo de chamada deve ser utilizada.

Contents

[edit] Chamadas síncronas

[edit] Comportamento

Chamadas síncronas requerem apenas um argumento, um objeto criteria que contém informações relevantes para o método da API de serviços chamado. Dado que a chamada é síncrona, o código de execução JavaScript irá na verdade ser bloqueado até que o método retorne.

[edit] Valores retornados

Uma chamada a um método síncrono retorna um objeto contendo 2 propriedades:

  • ReturnValue: Este é o real valor retornado pelo método chamado, sendo assim você deve chegar a definição do método para saber sua estrurura. Como um exemplo: chamando o método IDataSource.GetList() da Api de serviços sobre contatos, esta propriedade irá armazenar as informações de contato atuais. Se um método não retorna qualquer informação (ex, o método ILocation.CancelNotification() da API de serviços de localização), esta propriedade não inclui o objeto retornado.
  • ErrorCode: Um número que especifica um código de erro. Valor zero significa que não ocorreu erro. A tabela de erros completa está disponível [aqui
  • ErrorMessage:Uma mensagem descrevendo o erro retornado. Messangens de erro são diferentes para cada API de serviço. Por exemplo, esta é a lista completa de mensagens de erro para a API de serviços de contados.

[edit] Prós e contras

  • Pró: codificação simplificada: você recupera o valor esperado na mesma chamada de método sem a necessidade de implementar um mecanismo separado de callback.
  • Contra: execução bloqueada até que o método chamado retorne: Se a operação solicitada levar alguns segundos para ser executada, isto poderia causar um problema de usabilidade.

[edit] Chamdas assíncronas

[edit] Comportamento

Chamadas assíncronas requerem dois argumentos:

  • O mesmo objeto criteria passado em uma chamada síncrona.
  • uma função callback: O método a ser chamado quando o método retornar.

Sendo asssíncrono, seu código continua a sua execução normal sem a necessidade de aguardar pelo retorno do método chamado. Quando a informação retornada estiver disponível, o método de callback será chamado para manipular o retorno.

[edit] Valores retornados

O objeto retornado de uma chamada assíncrona é diferente do retornado por uma chamada síncrona e irá conter as seguintes propriedades:

  • TransactionID: Um identificador único que identifica a chamada assíncrona. Você pode utilizar este valor, por exemplo, em seu método de callback para identificar uma chamada espercífica.
  • ErrorCode: Um número que especifica um código de erro, como em uma chamada síncrona.
  • ErrorMessage: Uma mensagem descrevendo o erro retornado, como em uma chamada síncrona.

[edit] Método de callback

O método de callback é o método que é chamado quando a chamada assíncrona for finalizada e a informação a ser retornada estiver disponível. Ele deve ser definido para aceitar três argumentos:

  • transId: O ID da chamada assíncrona.
  • eventCode: Um número representando o status da callback. Valores possíveis são:
    • 2: Evento completado
    • 4: Evento de erro
    • 9: Evento em progresso
  • result: O valor real retornado pelo método chamado. Este valor é o mesmo que o retornado em uma chamada síncrona, então ele irá conter as mesmas três propriedades:
    • ReturnValue (opcional, dependendo do método chamado)
    • ErrorCode
    • ErrorMessage

Em geral as seguintes tarefas são implementadas em uma função de callback:

  • Checagem do ID de transação: para identificar a chamada assíncrona.
  • Checagem do código de evento: para verificar se o evento realmente foi finalizado (código 2), se ainda está em progresso (código 9), ou apresenta um erro (código 4).
  • Checagem do código de erro: De forma semelhante a uma chamada síncrona, antes de efetuar a manipulação das propriedades do objeto ReturnValue retornado, você deve verificar se houve algum erro na chamada do método verificando a propriedade ErrorCode.

[edit] Prós e Contras

  • Pró: execução do código não é bloqueada: Você pode fazer alo a mais (ex.: animações, outras chamadas de método) enquanto o método chamado é executado.
  • Contra: Manipulação manual da sincronia no seu código, definindo ações apropriadas dentro de um método de callback e gerenciando cuidadosamento os estados da aplicação e a UI.

[edit] Exceções

Nem todos os método suportam ambos os tipos de chamadas síncrona e assíncroa.

Por exemplo, o método IMessaging.GetList() da API de serviços de mensagem suporta apenas chamadas síncronas, enquanto que o método IDataSource.GetList() da API de serviços de gerenciamanto de mídia suporta apenas assíncrono.

[edit] Estudo de caso: recuperando a lista de contatos

Este exemplo mostra como recuperar a lista de contatos do dispositivo, usando tanto chamada síncrona quanto assíncrona. A manipualação de erros não é realizada neste exemplo, porém você deve realiza-lo em uma aplicação real.

Primeiro, instanciae o objeto Service:

var so = device.getServiceObject("Service.Contact", "IDataSource");

Agora definir o objeto criteria que irá ser usado para recuperar os contatos. Este objeto é o mesmo para chamadas síncronas e assíncronas.

var criteria = new Object();
criteria.Type = "Contact";

Então, definimos a função que irá realizar o tratamento dos contatos recuperados. Esta função pode ser igualmente utilizada para ambas as chamadas:

function handleContacts(contacts)
{
try
{
contacts.reset();
 
var contact;
 
while((contact = contacts.getNext()) != undefined)
{
//handle current contact
}
}
catch(e)
{
alert('Error while showing contacts');
}
}

[edit] Versão síncrona

A versão de chamada síncrona é bem direta. Você apenas precisa chamar o método GetList() e passar a informação retornada para o método handleContacts():

var result = so.IDataSource.GetList(criteria);
 
handleContacts(result.ReturnValue);

[edit] Versão assíncrona

Diferentemente da anterior, você deve definir um método de callback que irá ser chamado quando a chamada assíncrona ao método GetList() retornar. Em aplicações reais, você deveria também verificar os ID de transação para checar se a chamada f está realmente chamando o método de callback, e um eventCode para verificar se o evento está completo (o valor deve ser 2).

function contactsCallback(transId, eventCode, result)
{
handleContacts(result.ReturnValue);
}

Então, o método anterior (síncrono) irá mudar, tendo como segundo argumento a funçao contactsCallback. Aqui também, você deve verificar o erro retornado por esta chamada, e armazenar a propriedade TransactionID que irá ser usada no método de callback.

var result = so.IDataSource.GetList(criteria, contactsCallback);

[edit] Leituras complementares

This page was last modified on 1 August 2012, at 08:29.
122 page views in the last 30 days.