Porquê prolongar uma aula de Aplicação?

Por que alargar uma classe?

O que ganho com isso?

Porque Farias isso?

li que pode ser usado para declarar variáveis globais, é que todas ou existem outras aplicações?

Author: TN888, 2013-08-01

13 answers

De repente, não consigo pensar num cenário real em que a extensão da aplicação seja preferível a outra abordagem ou necessária para alcançar algo. Se você tem um objeto caro, frequentemente usado, você pode inicializá-lo em um serviço de IntentService quando você detectar que o objeto não está presente de momento. A aplicação em si é executada no thread UI, enquanto o serviço Intent é executado em seu próprio thread.

Prefiro passar dados da actividade para a actividade com intentos explícitos, ou usar Partedpreferências. Há também maneiras de passar dados de um fragmento para a sua atividade-mãe usando interfaces.

 25
Author: Joe Malin, 2013-08-01 20:01:00

Introdução:

enter image description here

  1. se considerarmos um ficheiro {[[0]} no nosso telemóvel, é composto de vários blocos úteis tais como, Activitys, Services e outro.
  2. estes componentes não comunicam entre si regularmente e não se esqueça que eles têm o seu próprio ciclo de vida. o que indica que eles podem estar ativos em um momento e inativos no outro momento.

Requisitos:

    Por vezes, podemos precisar de um cenário em que precisamos de ter acesso a variável e seus estados em todo o Application independentemente de o Activity que o Utilizador está a usar,
  1. um exemplo é que um utilizador pode precisar de aceder a uma variável que mantém a sua informações sobre o pessoal (por exemplo, nome) a que tem de ser acedido através do Application,
  2. podemos usar o SQLite mas criar um Cursor e fechá-lo novamente e mais uma vez não é bom no desempenho,
  3. Podemos usar os dados para passar, mas é desajeitado e activo. pode não existir em um certo cenário dependendo da disponibilidade de memória.

Utilizações da classe de Aplicação:

  1. acesso a variáveis através do Application,
  2. Você pode usar o Application para começar certas coisas como análise etc. dado que a classe de aplicação é iniciada antes de Activity ou Services estão a ser executados,
  3. existe um método sobreposto chamado onconfiguration changed() que é despoletado quando a configuração da aplicação é alterada (horizontal para vertical & vice-versa),
  4. existe também um evento chamado onLowMemory () que é despoletado quando o dispositivo Android tem pouca memória.
 107
Author: Devrath, 2017-11-02 12:41:26

A classe de aplicação é o objecto que tem o ciclo de vida completo da sua aplicação. É a sua camada mais alta como uma aplicação. exemplo de usos possíveis:

  • pode adicionar o que precisa quando a aplicação é iniciada anulando o oncreato na classe de Aplicação.
  • Armazenar variáveis globais que saltam da actividade para a actividade. Como Uma Máscara.

    Etc

 59
Author: wtsang02, 2013-08-01 19:01:32

Às vezes você quer armazenar dados, como variáveis globais que precisam ser acessadas a partir de múltiplas atividades - às vezes em todos os lugares dentro da aplicação. Neste caso, o objeto da aplicação irá ajudá-lo.

Por exemplo, se quiser obter os dados básicos de autenticação para cada pedido http, poderá implementar os métodos para os dados de autenticação no objecto da aplicação.

Depois disso, você pode obter o nome de usuário e senha em qualquer uma das atividades como isto:
MyApplication mApplication = (MyApplication)getApplicationContext();
String username = mApplication.getUsername();
String password = mApplication.getPassword();

E finalmente, lembre-se de usar o objecto da aplicação como um objecto singleton:

 public class MyApplication extends Application {
    private static MyApplication xxx;

    public MyApplication getInstance(){
        return singleton;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        singleton = this;
    }
}

Para mais informações. Por favor, Clique nesta ligação

 30
Author: IntelliJ Amiya, 2014-12-11 06:53:26

A classe de aplicação é um singleton a que pode aceder a partir de qualquer actividade ou em qualquer outro local onde tenha um objecto de contexto.

Também tens um pouco de ciclo de vida.

Você poderia usar o método de oncreato da aplicação para instanciar objetos caros, mas frequentemente usados como um auxiliar de análise. Então você pode acessar e usar esses objetos em todos os lugares.

 7
Author: Jon F Hancock, 2013-08-01 18:56:43

Melhor utilização da classe de Aplicação. Exemplo: suponha que você precisa reiniciar o seu gestor de alarmes no arranque terminado.

public class BaseJuiceApplication extends Application implements BootListener {

    public static BaseJuiceApplication instance = null;

    public static Context getInstance() {
        if (null == instance) {
            instance = new BaseJuiceApplication();
        }
        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();


    }

    @Override
    public void onBootCompleted(Context context, Intent intent) {
        new PushService().scheduleService(getInstance());
        //startToNotify(context);
    }
 7
Author: Srishti Roy, 2015-11-24 13:23:41

Não uma resposta, mas uma observação: mantenha em mente que os dados no aplicativo estendido objeto não deve ser amarrado a uma instância de uma atividade, como é possível que você tenha duas instâncias de uma mesma atividade em execução ao mesmo tempo (um no primeiro plano e não sendo visível).

Por exemplo, você inicia sua atividade normalmente através do lançador, e então "minimiza". Você então iniciar outro aplicativo (ou seja, Tasker) que inicia outra instância do seu ativitiy, por exemplo, a fim de criar um atalho, porque o seu aplicativo suporta android.intencao.accao.CREATE_SHORTCUT. Se o atalho for então criado e este atalho-criando invocação da atividade modificar os dados o objeto da aplicação, então a atividade em execução em segundo plano começará a usar este objeto de Aplicação modificado, uma vez que ele seja trazido de volta para o primeiro plano.
 4
Author: Daniel F, 2015-11-24 13:17:36

Fonte: https://github.com/codepath/android_guides/wiki/Understanding-the-Android-Application-Class

Em muitos aplicativos, não há necessidade de trabalhar diretamente com uma classe de Aplicação. No entanto, existem alguns usos aceitáveis de uma classe de Aplicação personalizada:
    Tarefas especializadas que precisam ser executadas antes da criação da primeira actividade Inicialização Global que precisa ser compartilhada em todos os componentes (relatório do estoiro, persistência) Métodos estáticos para fácil acesso a dados imutáveis estáticos, tais como: objecto do cliente de rede partilhada

Você nunca deve armazenar dados de instância mutáveis dentro do objecto da aplicação porque se assumir que os seus dados ficarão lá, a sua aplicação irá inevitavelmente estoirar em algum ponto com uma definição de ponto null. O objeto de aplicação não é garantido para ficar na memória para sempre, ele vai ser morto. Ao contrário da crença popular, o aplicativo não será reiniciado a partir de zero. Android irá criar um novo objeto de aplicação e iniciar a atividade onde o usuário estava antes para dar a ilusão de que o aplicativo nunca foi morto em primeiro lugar.

 3
Author: Periworks, 2018-02-10 21:28:17
Vejo que falta uma resposta a esta pergunta. Eu extendo Application porque eu uso Bill Pugh Singleton implementação ( ver referência ) e alguns dos meus singletons precisam de contexto. A classe Application parece-se com isto:
public class MyApplication extends Application {

    private static final String TAG = MyApplication.class.getSimpleName();

    private static MyApplication sInstance;

    @Contract(pure = true)
    @Nullable
    public static Context getAppContext() {
        return sInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate() called");
        sInstance = this;
    }
}
E os singletons são assim:
public class DataManager {

    private static final String TAG = DataManager.class.getSimpleName();

    @Contract(pure = true)
    public static DataManager getInstance() {
        return InstanceHolder.INSTANCE;
    }

    private DataManager() {
        doStuffRequiringContext(MyApplication.getAppContext());
    }

    private static final class InstanceHolder {
        @SuppressLint("StaticFieldLeak")
        private static final DataManager INSTANCE = new DataManager();
    }
}
Assim não preciso de ter um contexto cada vez que uso um singleton e fico preguiçoso de inicialização sincronizada com uma quantidade mínima de código. Dica: a actualizar o Android Studio singleton template economiza muito tempo.
 2
Author: Sir Codesalot, 2017-04-30 06:52:43

O uso de estender a aplicação apenas certifique - se de qualquer tipo de operação que deseje durante todo o período de execução da sua aplicação. Agora pode ser qualquer tipo de variáveis e suponha que se você quiser obter alguns dados do servidor então você pode colocar sua asynctask na aplicação para que ele irá buscar cada vez e continuamente, de modo que você vai obter um dados atualizados automaticamente.. Use este link para mais conhecimento....

Http://www.intridea.com/blog/2011/5/24/how-to-use-application-object-of-android

 1
Author: Vishal Jain, 2015-07-17 09:13:43

Você pode acessar variáveis a qualquer classe sem criar objetos, se for estendido por aplicação. Eles podem ser chamados globalmente e seu estado é mantido até que a aplicação não seja morta.

 0
Author: taran mahal, 2014-09-23 14:22:08
Comece por criar uma classe que amplie o andróide.aplicacao.Aplicacao. O Android cria uma instância desta classe quando a aplicação é iniciada – ou seja, quando um processo DVM é iniciado para executar o seu apk. Como um exemplo de como a aplicação funciona, vamos assumir que estamos construindo algum tipo de jogo. Nossa aplicação de jogo terá várias telas-cada tela neste caso sendo uma atividade. Os jogadores do jogo geram pontos em cada tela e sua pontuação precisa ser rastreada através das muitas telas do nosso jogo hipotético. A fim de acompanhar a pontuação do jogo do Usuário através das muitas atividades que compõem o jogo, precisamos de um lugar para armazenar a pontuação do jogo para a duração do jogo – isto é, enquanto o processo de aplicação está em execução.
 0
Author: Muhammed Thasneem, 2015-03-16 04:43:36
Eu acho que você pode usar a classe de Aplicação para muitas coisas, mas todas elas estão ligadas à sua necessidade de fazer algumas coisas antes de qualquer de suas atividades ou serviços serem iniciados. Por exemplo, em minha aplicação eu uso fontes personalizadas. Em vez de chamar

Typeface.createFromAsset()

De todas as actividades para obter referências para as minhas fontes a partir da pasta de activos (isto é mau porque irá resultar numa fuga de memória, uma vez que está a manter uma referência aos activos sempre que chama a esse método), faço isto a partir do onCreate() Método na minha classe de Aplicação:

private App appInstance;
Typeface quickSandRegular;
...
public void onCreate() {
    super.onCreate();

    appInstance = this;
    quicksandRegular = Typeface.createFromAsset(getApplicationContext().getAssets(),
                       "fonts/Quicksand-Regular.otf");
   ...
   }
Também tenho um método definido como este:
public static App getAppInstance() {
    return appInstance;
}

E isto:

public Typeface getQuickSandRegular() {
    return quicksandRegular;
}
Então, de qualquer lugar da minha aplicação, tudo o que tenho de fazer é:
App.getAppInstance().getQuickSandRegular()

Outro uso para a classe de Aplicação para mim é verificar se o dispositivo está conectado à Internet antes de atividades e serviços que exigem uma conexão realmente começar e tomar as medidas necessárias.

 0
Author: ojonugwa ochalifu, 2016-12-08 16:55:45