Essas informações ajudam a entender como as falhas são rastreadas e as práticas recomendadas para lidar com falsas falhas.
As falhas do aplicativo são rastreadas como parte das métricas de ciclo de vida. Antes de rastrear falhas, adicione a biblioteca ao seu projeto e implemente o ciclo de vida. Para obter mais informações, consulte Adicionar o SDK e o arquivo de configuração ao projeto IntelliJ IDEA ou Eclipse na Implementação principal e ciclo de vida.
Quando as medições de ciclo de vida são implementadas, é feita uma chamada Config.collectLifecycleData
no método OnResume
para cada atividade. No método onPause
, é feita uma chamada para Config.pauseCollectingLifeCycleData
.
Em pauseCollectingLifeCycleData
, é definido um sinalizador pra indicar uma saída. Quando o aplicativo é inicializado novamente ou retomado, o collectLifecycleData
seleciona esse sinalizador. Se o aplicativo não for bem sucedido ao sair, como determinado pelo status do sinalizador, um dado de contexto a.CrashEvent
é enviado com a próxima chamada, e é reportado um evento de falha.
Para assegurar um relatório de falhas preciso, você deve chamar pauseCollectingLifeCycleData
no método onPause
de cada atividade. Para entender porque isso é essencial, esta é uma ilustração do ciclo de vida de uma atividade no Android:
Para obter mais informações sobre o ciclo de vida da atividade do Android, consulte Atividades.
Esta ilustração do ciclo de vida do Android foi criada e compartilhada pelo Projeto de fonte aberta do Android e usado de acordo com os termos na Licença de atribuição dos Comuns criativos 2.5.
Se estiver fazendo uma depuração com um IDE, como o Android Studio, iniciar o aplicativo novamente a partir do IDE enquanto o aplicativo está em primeiro plano causa uma falha.
É possível evitar essa falha colocando o aplicativo em segundo plano antes de iniciar novamente pelo IDE.
Se a última atividade em primeiro plano do aplicativo for posta em segundo plano e não fizer chamada Config.pauseCollectingLifecycleData();
no onPause
, e se seu aplicativo for fechado manualmente ou suspenso pelo OS, a próxima inicialização resultará em falha.
Os fragmentos têm eventos de ciclo de vida do aplicativo semelhantes a Atividades. No entanto, um Fragmento não pode estar ativo sem estar anexado a uma Atividade.
É necessário confiar nos eventos do ciclo de vida contra os quais as atividades relativas podem executar seu código. Isso será tratado pela exibição principal do Fragmento.
A partir da API nível 14, o Android permite chamadas de retorno de ciclos de vida globais nas atividades. Para obter mais informações, consulte Aplicativo.
É possível usar essas chamadas de retorno para garantir que todas as atividades façam chamadas collectLifecycleData()
e pauseCollectingLifecycleData()
de maneira correta. É necessário adicionar esse código apenas na Atividade principal e qualquer outra Atividade no site que pode ser iniciada pelo aplicativo:
import com.adobe.mobile.Config;
public class MainActivity extends Activity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getApplication().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityResumed(Activity activity) {
Config.setContext(activity.getApplicationContext());
Config.collectLifecycleData(activity);
}
@Override
public void onActivityPaused(Activity activity) {
Config.pauseCollectingLifecycleData();
}
// the following methods aren't needed for our lifecycle purposes, but are required to be implemented
// by the ActivityLifecycleCallbacks object
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
@Override
public void onActivityStarted(Activity activity) {}
@Override
public void onActivityStopped(Activity activity) {}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
@Override
public void onActivityDestroyed(Activity activity) {}
});
}
...
}
Para enviar dados de contexto adicionais na chamada do ciclo de vida usando Config.collectLifecycleData(Activity activity
, Map<String
, Object> contextData)
, é necessário substituir o método onResume
daquela atividade e realizar uma chamada super.onResume()
após fazer uma chamada collectLifecycleData
manualmente.
@Override
protected void onResume() {
HashMap<String, Object> cdata = new HashMap<>();
cdata.put("someKey", "someValue");
Config.collectLifecycleData(this, cdata);
super.onResume();
}