AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 77494749
Accepted
tautology
tautology
Asked: 2023-11-16 20:20:56 +0800 CST2023-11-16 20:20:56 +0800 CST 2023-11-16 20:20:56 +0800 CST

Maneira mais simples de atualizar um campo de texto com os resultados de uma tarefa assíncrona no JetPack Compose

  • 772

Estou escrevendo um aplicativo Android simples que precisa executar uma tarefa de longa execução em segundo plano e, em seguida, retornar essa resposta (a duração da tarefa será de até 10 minutos). Parece haver dezenas de maneiras de executar tarefas assíncronas no Kotlin, todas com suas peculiaridades estranhas.

A maneira que quero que funcione (para teste) é criar uma linha com o título e um valor. Ele deve colocar um texto de espaço reservado para o valor enquanto inicia a tarefa assíncrona em segundo plano. Quando a tarefa terminar, espero que o valor seja atualizado. Não é necessária nenhuma interação do usuário com o aplicativo.

Tentei fazer isso com LaunchedEffect porque parece ser a técnica menos complicada, usando uma função que pode ser composta como:

@Composable
fun addLine(name: String, pwd: String)
{
   Row
   {
      var output: String="Not Found"
      Text(name)

      LaunchedEffect(Unit)
      {
         val guess: String=bruteforce(pwd)
         if (guess != "")
         {
            # Value to update the text to
            output=guess
         }
      }
      # This is the text the needs to change
      Text(output)
   }
}

Não consigo descobrir uma maneira simples de fazer isso, todos os exemplos facilmente pesquisáveis ​​no Google exigem interações do usuário ou várias etapas extras ou bibliotecas personalizadas estranhas. Esta deveria ser uma tarefa trivial, e está em outros frameworks, mas está me derrotando totalmente.

Não estou muito preocupado se devo fazer assim - só quero um mecanismo simples para atualizar um ou mais campos de texto com um valor que seja executado de forma assíncrona. A tarefa complexa só será executada uma vez.

asynchronous
  • 1 1 respostas
  • 17 Views

1 respostas

  • Voted
  1. Best Answer
    Faruk Karaca
    2023-11-16T22:48:48+08:002023-11-16T22:48:48+08:00

    Você inicia um escopo de corrotina e executa seu código. Você mantém um estado usando output. Se você atualizar outputcom base no resultado, o Textserá atualizado. Esta é uma abordagem direta para atingir seu objetivo. Porém, nesse tipo de lógica, se sua addLinefunção de composição passar por uma recomposição completa, seu código, que leva 10 minutos para ser executado, pode precisar ser reiniciado.

    Para uma solução mais robusta, faria mais sentido utilizar a viewModele a stateFlow. Porém, como você solicitou especificamente a lógica mais simples, eu a implementei desta forma

    val scope = rememberCoroutineScope()
    var output by remember { mutableStateOf("") }
    
    scope.launch {
        delay(1000) // here add your logic
    
        output = "your text after logic" // set output to text
    }
    
    Text(output) 
    
    • 1

relate perguntas

  • É seguro usar RefCell em uma estrutura de dados acessada com algum bloqueio de granulação grossa?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve