Tratamento de exibição mudança Tamanho

Rahulrr2602:

Eu estou migrando meu alvo aplicativo SDK Versão para oreo android.

Uma das mudanças que possam afectar o aplicativo é que, se o tamanho de exibição do dispositivo é alterada em seguida, o aplicativo alvo Nougat Android e acima será notificado como se houvesse uma mudança na orientação do dispositivo. Abaixo está a fonte.

Quando as mudanças de densidade de dispositivos, o notifica sistema executando aplicativos das seguintes formas:

Se uma alvos de aplicativos API nível 23 ou inferior, o sistema automaticamente mata todos os seus processos de fundo. Isto significa que se um usuário muda longe de tal um aplicativo para abrir a tela de Configurações e muda a configuração do tamanho de exibição, o sistema mata o aplicativo da mesma maneira que faria em uma situação de pouca memória. Se o aplicativo tem quaisquer processos de primeiro plano, o notifica sistema os processos da mudança de configuração como descrito na Manipulação de tempo de execução Changes, como se a orientação do dispositivo tinha mudado. Se um metas de aplicativos Android 7.0, todos os seus processos (de primeiro plano e fundo) são notificados da alteração de configuração como descrito na Manipulação de tempo de execução Changes.

Agora meu aplicativo tem um processo longrunning que é executado em um Async Tsak em uma Atividade Android. O que significa que o aplicativo tem um AsyncTask que está dentro do Código de Atividade.

I criar uma caixa de diálogo no início do Async Tarefa e escondê-lo quando o Async Task fez o seu trabalho.

Agora, suponha que os usuários iniciar a tarefa e, em seguida, vai para a definição e muda o tamanho de exibição, em seguida, voltar para o meu aplicativo, em seguida, a caixa de diálogo do aplicativo é ido pela Async Task ainda é realizada até o fim o que significa que o usuário pode pensar que o aplicativo tenha terminado a tarefa, mas enquanto o aplicativo seria realmente executar a tarefa. Mas minha atividade também está respondendo como se reiniciado exceto que Async tarefas está sendo executado.

orientação do meu aplicativo bloqueado para retrato.

Como devo lidar com esse cenário? Qualquer ajuda é apreciada. Obrigado!

EDIT: Este é o cenário

1) App Iniciar

2) Tela Principal

3) Os usuários pressionar um botão

4) AsyncTask dentro da tela principal começou

5) uma caixa de diálogo é mostrada com o progresso da tarefa

6) usuário minimiza o App e vai para a definição

7) Altera o tamanho de exibição / Densidade ou muda o tamanho da fonte do dispositivo

8) Meu App é chamado pelo sistema operacional de tal maneira a como se a rotação do dispositivo é alterada

9) Em seguida, o usuário retorna para o aplicativo

10) Mas não é mais sendo mostrada a caixa de diálogo mostrada

11) Mas o assíncrona tarefas está sendo executado em segundo plano e ainda está realizando sua tarefa

12) A tarefa é realmente feito, mas o usuário pensa que a tarefa ainda não está feito.

Strom:

No seu método de on_resume () verificar o tamanho da tela eo tamanho da fonte não mudaram. Se eles têm, ajuste, remova e recrie, sua caixa de diálogo de forma adequada. Isto é semelhante ao tratamento de alterações de orientação enquanto suspenso (adicionando o tamanho da fonte como uma condição).

EDITAR:

Adicionar android:configChanges="fontScale|density"ao seu arquivo de manifesto.

static int fontScale = 1;
static int densityDpi = 0;

public void onConfigurationChanged(Configuration newConfig) {
  if (newConfig.fontScale != fontScale) {
    // destroy and recreate dialog adjusting for font size.
    fontScale = newConfig.fontScale;
  }
  if (newConfig.densityDpi != densityDpi) {
    // destroy and recreate dialog adjusting for new screen size.
    densityDpi = newConfig.densityDpi;
  }
}

Provavelmente seria melhor para utilizar notificações para a tarefa assíncrona, uma vez que eles não são afetados por mudanças de configuração e não são terminadas em condições de pouca memória.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=136918&siteId=1
Recomendado
Clasificación