Como lidar com o encerramento do aplicativo QML?

3

Eu preciso manter o estado de um aplicativo QML quando ele é encerrado e lê-lo quando o aplicativo é carregado.

Eu tentei usar Component.onCompleted e Component.onDestruction dentro do MainView ' Page .

Enquanto isso funciona bem na área de trabalho, no dispositivo não funciona: Component.onDestruction não é chamado quando você fecha o aplicativo.

Qual é a maneira correta de lidar com o ciclo de vida do aplicativo?

    
por Cos64 08.08.2015 / 12:52

1 resposta

3

Os componentes do Ubuntu incluem o recurso StateSaver . Isso permite que as propriedades QML sejam salvas na saída do programa e restauradas na reinicialização. Para cada elemento com propriedades que você deseja salvar, defina a propriedade StateSaver.properties como uma lista separada por vírgulas das propriedades que devem ser salvas.

No entanto, existem duas enormes limitações do StateSaver. Primeiro, o estado não será restaurado se o programa for iniciado por meio do manipulador Uri. Segundo, nenhum estado será salvo quando seu programa for "fechado corretamente". Não tenho ideia do que conta como fechar corretamente e, portanto, não sei como testar isso.

Como eu estava tentando isso, eu tropecei em algo estranho: Se você definir uma propriedade StateSaver em um elemento, Component.onDestruction é chamado. Quando adicionei à principal Page de um aplicativo de teste,

StateSaver.properties: "title"
StateSaver.enabled: false

meus manipuladores de destruição começaram a ser chamados, pelo menos nas saídas normais. Você pode combinar isso com o StateSaver para garantir que o estado seja salvo em saídas normais e anormais. Eu não sei que você pode contar com esse comportamento, no entanto. Eu suspeito que possa ser um acidente da implementação do StateSaver.

Outra abordagem seria salvar o estado toda vez que algo mudar. Isso garante que você não precise fazer nada na saída; seu estado já está seguro. Um problema com essa abordagem é que as mudanças de estado geralmente são associadas a alterações no próprio aplicativo, e o processo de salvamento pode induzir lentidão. Eu me deparei com esse tipo de problema, então eu atrasou a gravação do banco de dados por um segundo . Isso é imperfeito, já que eu perderia o estado se o programa travasse durante esse segundo. Mas senti que o risco era pequeno o suficiente, e a mudança de estado era inconsequente o suficiente para tornar isso aceitável.

    
por Robert Schroll 25.08.2015 / 22:17