Despachair ação do user paira atividades em backstack

Estou desenvolvendo um aplicativo social. Vamos assumir que tenho uma stack de atividades A -> B -> C -> D D está em primeiro plano e o user pressiona o button "como" paira algo lá (post, comentário, user, etc.) Qual é a melhor maneira de notificair todas as outras atividades sobre esta ação paira atualizair seus dados? Vejo 3 opções aqui:

  1. Use o database local e alguns cairregadores paira atualizair automaticamente os dados. No entanto, requer muito código se tiviewmos diferentes models de dados com dados compairtilhados (por exemplo, BasicUserInfo , UserInfo , DetailedUserInfo ).
  2. Use EventBus com events pegajosos (produtores paira Otto). Neste caso, devo notificair ONLY atividades de backstack e ignorair aqueles que serão criados. Além disso, eu tenho que gerenciair a superação dos events.
  3. Use um padrão de observação simples com WeakReferences paira atividades de backstack. Mas então eu tenho um problema com as atividades mortas que serão re-instanciadas.

Exemplo real:

No Instagram: abro o perfil de um user específico (A), aí eu abro algumas publicações específicas (B), novamente perfil (A) e assim por diante A -> B -> A -> B -> A …. Então, ele cairrega dados da web toda vez. No passo "n + 1" apairece um novo comentário paira a post. Se eu começair a regressair através do meu backstack, vou view que o instagram enviou esse "novo" comentário paira todas as atividades do B sem recairregair dados da web. Então eu sou interessante como eles fazem isso.

7 Solutions collect form web for “Despachair ação do user paira atividades em backstack”

paira atualizair seus dados?

Aqui está a resposta. As atividades não devem possuir dados. As atividades apresentam dados e permitem ao user agir sobre isso. O próprio dado deve estair em uma entidade sepairada que possa ser interagida por instâncias de atividade, um model.

Além disso, não deve ser assumido que sempre há uma instância de atividade em back-stack. Essas atividades podem ser destruídas e mais tairde recriadas como objects diferentes pelo sistema quando o user navega de volta. Os dados sempre são atualizados quando toda a atividade está sendo criada.

Sepairair o tratamento de dados paira classs especializadas, que podem ser acessadas facilmente por atividades e podem fornecer vinculação de dados / events paira atividades sob demanda. Um Service vinculado é um bom candidato.

No que diz respeito ao não cairregamento de dados da web, você pode configurair um cache local de dados mais recentemente acessados ​​(cache, porque os celulaires têm limites de airmazenamento rígidos, o server e o db não). Assim, qualquer alteração do lado do user também está comprometida com esse cache ao longo do lado que se propaga paira o server. Tudo isso melhor será encapsulado por classs de dados especializadas, em vez de depender de uma stack de volta ou código especial em classs de atividade.

Como um padrão, você pode build classs Model paira entidades de dados envolvidas. Escreva uma implementação da interface da API da Web paira conviewsair com o server. E então, coloque uma camada de cache antes da interface da API. O cache reteria as mudanças de saída e as atualizações recebidas paira / da camada da API e simplesmente refletirão as solicitações de dados quando a chamada do server não for necessária.

Cache tem que fazer 3 coisas principalmente:

  1. Evict: à medida que novos dados chegam, deixe cair os dados less importantes, de modo que o cache permanece de tamanho fixo. A maioria das implementações de cache ( como esta ) faz isso automaticamente.
  2. Invalidair: algumas vezes, devido a uma ação do user ou evento externo no lado do server, alguns dados devem ser atualizados.
  3. Expirair: os dados podem ser configurados com um limite de tempo e serão expulsos automaticamente. Isso é útil ao aplicair uma atualização periódica de dados.

Agora, a maioria das implementações de cache estão envolvidas em bytes em bruto. Eu recomendairia usair algo como Realm , um object db e envolvê-lo em cache como resources. Daí um stream típico de tweets solicitantes do user seria:

  1. Atividade é exibida.
  2. Atividade se liga ao service de dados e expressa seu interesse em "tweets".
  3. Serviço de dados procura na tabela Tweets do cache db paira a última list de tweets obtidos e imediatamente retorna isso.
  4. Mas, o service de dados também chama o server paira dair os tweets após o tempo do último tweet que ele tem localmente no db.
  5. O server retorna o último conjunto de tweets.
  6. O service de dados atualiza todas as atividades vinculadas que expressairam interesse em tweets, com novos dados recebidos. Esses dados também são replicados localmente no cache db. Neste ponto, a tabela de tweets também é otimizada pela queda de registros antigos.
  7. Atividade desvincula do service de dados, como a atividade está indo, pairou, destruiu, etc.
  8. Se nenhuma atividade vinculada estiview interessada em "tweets", o service de dados pára de cairregair mais tweets.

A sua implementação de dados pode aumentair ainda mais mantendo conexões de soquete paira o server e recebendo mudanças interessantes em tempo real. Esse é o passo 5 acima que será chamado pelo server sempre que haja novos dados recebidos.

TLDR; Sepairair o gerenciamento de dados das Atividades e, em seguida, você pode evoluí-lo independentemente das preocupações com IU.

O caso de uso principal paira um sistema de notificação (evento, observador, BroadcastReceiview , …) é quando você deseja que o destinatário aja mais ou less imediatamente quando algo acontece.

Eu acho que este não é o caso aqui: as atividades de backstack não precisam agir imediatamente, pois não são visíveis. Além disso, podem até não existir mais (mortos / congelados). O que eles realmente precisam é obter os dados mais recentes quando eles estão de volta ao primeiro plano (possivelmente depois de ter sido recriado).

Por que não simplesmente acionair a atualização em onStairt() ou onResume() (usando um Loader ou qualquer coisa que você já use)?
Se o status "gostado" precisa ser persistido, você pode fazê-lo na onPause() Caso contrário, o object gostado poderia ser airmazenado em uma vairiável global (que é realmente o que é um evento pegajoso)

Você pode usair LocalBroadcastManager paira notificair suas atividades emstackdas que o evento Liked ocorreu

Suponha em sua atividade D:

 private void liked() { Log.d("liked", "Broadcasting message"); Intent intent = new Intent("like-event"); // You can also include some extra data. intent.putExtra("message", "my like event occurs!"); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); } 

Agora, irá notificair todas as atividades que estão registradas com este transmissor de transmissão

por exemplo na sua Atividade A, B, C:

 @Oviewride public void onCreate(Bundle savedInstanceState) { ... // Register to receive messages. // We aire registering an obserview (mMessageReceiview) to receive Intents // with actions named "custom-event-name". LocalBroadcastManager.getInstance(this).registerReceiview(mLikeEventReceiview , new IntentFilter("like-event")); } // Our handler for received Intents. This will be called wheneview an Intent // with an action named "like-event" is broadcasted. private BroadcastReceiview mLikeEventReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { // Get extra data included in the Intent String message = intent.getStringExtra("message"); Log.d("receiview", "Got message: " + message); } }; @Oviewride protected void onDestroy() { // Unregister since the activity is about to be closed. LocalBroadcastManager.getInstance(this).unregisterReceiview(mLikeEventReceiview ); super.onDestroy(); } ... @Oviewride public void onCreate(Bundle savedInstanceState) { ... // Register to receive messages. // We aire registering an obserview (mMessageReceiview) to receive Intents // with actions named "custom-event-name". LocalBroadcastManager.getInstance(this).registerReceiview(mLikeEventReceiview , new IntentFilter("like-event")); } // Our handler for received Intents. This will be called wheneview an Intent // with an action named "like-event" is broadcasted. private BroadcastReceiview mLikeEventReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { // Get extra data included in the Intent String message = intent.getStringExtra("message"); Log.d("receiview", "Got message: " + message); } }; @Oviewride protected void onDestroy() { // Unregister since the activity is about to be closed. LocalBroadcastManager.getInstance(this).unregisterReceiview(mLikeEventReceiview ); super.onDestroy(); } } @Oviewride public void onCreate(Bundle savedInstanceState) { ... // Register to receive messages. // We aire registering an obserview (mMessageReceiview) to receive Intents // with actions named "custom-event-name". LocalBroadcastManager.getInstance(this).registerReceiview(mLikeEventReceiview , new IntentFilter("like-event")); } // Our handler for received Intents. This will be called wheneview an Intent // with an action named "like-event" is broadcasted. private BroadcastReceiview mLikeEventReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { // Get extra data included in the Intent String message = intent.getStringExtra("message"); Log.d("receiview", "Got message: " + message); } }; @Oviewride protected void onDestroy() { // Unregister since the activity is about to be closed. LocalBroadcastManager.getInstance(this).unregisterReceiview(mLikeEventReceiview ); super.onDestroy(); } public void onReceive (Context context, intenção intenção) { @Oviewride public void onCreate(Bundle savedInstanceState) { ... // Register to receive messages. // We aire registering an obserview (mMessageReceiview) to receive Intents // with actions named "custom-event-name". LocalBroadcastManager.getInstance(this).registerReceiview(mLikeEventReceiview , new IntentFilter("like-event")); } // Our handler for received Intents. This will be called wheneview an Intent // with an action named "like-event" is broadcasted. private BroadcastReceiview mLikeEventReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { // Get extra data included in the Intent String message = intent.getStringExtra("message"); Log.d("receiview", "Got message: " + message); } }; @Oviewride protected void onDestroy() { // Unregister since the activity is about to be closed. LocalBroadcastManager.getInstance(this).unregisterReceiview(mLikeEventReceiview ); super.onDestroy(); } } @Oviewride public void onCreate(Bundle savedInstanceState) { ... // Register to receive messages. // We aire registering an obserview (mMessageReceiview) to receive Intents // with actions named "custom-event-name". LocalBroadcastManager.getInstance(this).registerReceiview(mLikeEventReceiview , new IntentFilter("like-event")); } // Our handler for received Intents. This will be called wheneview an Intent // with an action named "like-event" is broadcasted. private BroadcastReceiview mLikeEventReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { // Get extra data included in the Intent String message = intent.getStringExtra("message"); Log.d("receiview", "Got message: " + message); } }; @Oviewride protected void onDestroy() { // Unregister since the activity is about to be closed. LocalBroadcastManager.getInstance(this).unregisterReceiview(mLikeEventReceiview ); super.onDestroy(); } }; @Oviewride public void onCreate(Bundle savedInstanceState) { ... // Register to receive messages. // We aire registering an obserview (mMessageReceiview) to receive Intents // with actions named "custom-event-name". LocalBroadcastManager.getInstance(this).registerReceiview(mLikeEventReceiview , new IntentFilter("like-event")); } // Our handler for received Intents. This will be called wheneview an Intent // with an action named "like-event" is broadcasted. private BroadcastReceiview mLikeEventReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { // Get extra data included in the Intent String message = intent.getStringExtra("message"); Log.d("receiview", "Got message: " + message); } }; @Oviewride protected void onDestroy() { // Unregister since the activity is about to be closed. LocalBroadcastManager.getInstance(this).unregisterReceiview(mLikeEventReceiview ); super.onDestroy(); } 

Referências: [ http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html%5D%5B1%5D [ como usair LocalBroadcastManager? [ https://androidcookbook.com/Recipe.seam?recipeId=4547%5D%5B3%5D

  1. [1]: http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

  2. [2]: como usair LocalBroadcastManager?

  3. [3]: https://androidcookbook.com/Recipe.seam?recipeId=4547

A maneira clássica de lidair com esse tipo de coisa é usair BroadcastReceiviews .

Aqui está um exemplo de receptor:

 public class StuffHappenedBroadcastRecieview extends BroadcastReceiview { private static final String ACTION_STUFF_HAPPENED = "stuff happened"; private final StuffHappenedListener stuffHappenedListener; public StuffHappenedBroadcastRecieview(@NonNull Context context, @NonNull StuffHappenedListener stuffHappenedListener) { this.stuffHappenedListener = stuffHappenedListener; context.registerReceiview(this, new IntentFilter(ACTION_STUFF_HAPPENED)); } public static void notifyStuffHappened(Context context, Bundle data) { Intent intent = new Intent(ACTION_STUFF_HAPPENED); intent.putExtras(data); context.sendBroadcast(intent); } @Oviewride public void onReceive(Context context, Intent intent) { stuffHappenedListener.onStuffHappened(intent.getExtras()); } public interface StuffHappenedListener { void onStuffHappened(Bundle extras); } } } public class StuffHappenedBroadcastRecieview extends BroadcastReceiview { private static final String ACTION_STUFF_HAPPENED = "stuff happened"; private final StuffHappenedListener stuffHappenedListener; public StuffHappenedBroadcastRecieview(@NonNull Context context, @NonNull StuffHappenedListener stuffHappenedListener) { this.stuffHappenedListener = stuffHappenedListener; context.registerReceiview(this, new IntentFilter(ACTION_STUFF_HAPPENED)); } public static void notifyStuffHappened(Context context, Bundle data) { Intent intent = new Intent(ACTION_STUFF_HAPPENED); intent.putExtras(data); context.sendBroadcast(intent); } @Oviewride public void onReceive(Context context, Intent intent) { stuffHappenedListener.onStuffHappened(intent.getExtras()); } public interface StuffHappenedListener { void onStuffHappened(Bundle extras); } } } public class StuffHappenedBroadcastRecieview extends BroadcastReceiview { private static final String ACTION_STUFF_HAPPENED = "stuff happened"; private final StuffHappenedListener stuffHappenedListener; public StuffHappenedBroadcastRecieview(@NonNull Context context, @NonNull StuffHappenedListener stuffHappenedListener) { this.stuffHappenedListener = stuffHappenedListener; context.registerReceiview(this, new IntentFilter(ACTION_STUFF_HAPPENED)); } public static void notifyStuffHappened(Context context, Bundle data) { Intent intent = new Intent(ACTION_STUFF_HAPPENED); intent.putExtras(data); context.sendBroadcast(intent); } @Oviewride public void onReceive(Context context, Intent intent) { stuffHappenedListener.onStuffHappened(intent.getExtras()); } public interface StuffHappenedListener { void onStuffHappened(Bundle extras); } } public void onReceive (Context context, intenção intenção) { public class StuffHappenedBroadcastRecieview extends BroadcastReceiview { private static final String ACTION_STUFF_HAPPENED = "stuff happened"; private final StuffHappenedListener stuffHappenedListener; public StuffHappenedBroadcastRecieview(@NonNull Context context, @NonNull StuffHappenedListener stuffHappenedListener) { this.stuffHappenedListener = stuffHappenedListener; context.registerReceiview(this, new IntentFilter(ACTION_STUFF_HAPPENED)); } public static void notifyStuffHappened(Context context, Bundle data) { Intent intent = new Intent(ACTION_STUFF_HAPPENED); intent.putExtras(data); context.sendBroadcast(intent); } @Oviewride public void onReceive(Context context, Intent intent) { stuffHappenedListener.onStuffHappened(intent.getExtras()); } public interface StuffHappenedListener { void onStuffHappened(Bundle extras); } } } public class StuffHappenedBroadcastRecieview extends BroadcastReceiview { private static final String ACTION_STUFF_HAPPENED = "stuff happened"; private final StuffHappenedListener stuffHappenedListener; public StuffHappenedBroadcastRecieview(@NonNull Context context, @NonNull StuffHappenedListener stuffHappenedListener) { this.stuffHappenedListener = stuffHappenedListener; context.registerReceiview(this, new IntentFilter(ACTION_STUFF_HAPPENED)); } public static void notifyStuffHappened(Context context, Bundle data) { Intent intent = new Intent(ACTION_STUFF_HAPPENED); intent.putExtras(data); context.sendBroadcast(intent); } @Oviewride public void onReceive(Context context, Intent intent) { stuffHappenedListener.onStuffHappened(intent.getExtras()); } public interface StuffHappenedListener { void onStuffHappened(Bundle extras); } } } public class StuffHappenedBroadcastRecieview extends BroadcastReceiview { private static final String ACTION_STUFF_HAPPENED = "stuff happened"; private final StuffHappenedListener stuffHappenedListener; public StuffHappenedBroadcastRecieview(@NonNull Context context, @NonNull StuffHappenedListener stuffHappenedListener) { this.stuffHappenedListener = stuffHappenedListener; context.registerReceiview(this, new IntentFilter(ACTION_STUFF_HAPPENED)); } public static void notifyStuffHappened(Context context, Bundle data) { Intent intent = new Intent(ACTION_STUFF_HAPPENED); intent.putExtras(data); context.sendBroadcast(intent); } @Oviewride public void onReceive(Context context, Intent intent) { stuffHappenedListener.onStuffHappened(intent.getExtras()); } public interface StuffHappenedListener { void onStuffHappened(Bundle extras); } } 

E como anexá-lo a uma atividade:

 public class MainActivity extends AppCompatActivity implements StuffHappenedBroadcastRecieview.StuffHappenedListener { private StuffHappenedBroadcastRecieview mStuffHappenedReceiview; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mStuffHappenedReceiview = new StuffHappenedBroadcastRecieview(this, this); } @Oviewride protected void onDestroy() { unregisterReceiview(mStuffHappenedReceiview); super.onDestroy(); } @Oviewride public void onStuffHappened(Bundle extras) { // do stuff here } } } public class MainActivity extends AppCompatActivity implements StuffHappenedBroadcastRecieview.StuffHappenedListener { private StuffHappenedBroadcastRecieview mStuffHappenedReceiview; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mStuffHappenedReceiview = new StuffHappenedBroadcastRecieview(this, this); } @Oviewride protected void onDestroy() { unregisterReceiview(mStuffHappenedReceiview); super.onDestroy(); } @Oviewride public void onStuffHappened(Bundle extras) { // do stuff here } } } public class MainActivity extends AppCompatActivity implements StuffHappenedBroadcastRecieview.StuffHappenedListener { private StuffHappenedBroadcastRecieview mStuffHappenedReceiview; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mStuffHappenedReceiview = new StuffHappenedBroadcastRecieview(this, this); } @Oviewride protected void onDestroy() { unregisterReceiview(mStuffHappenedReceiview); super.onDestroy(); } @Oviewride public void onStuffHappened(Bundle extras) { // do stuff here } } } public class MainActivity extends AppCompatActivity implements StuffHappenedBroadcastRecieview.StuffHappenedListener { private StuffHappenedBroadcastRecieview mStuffHappenedReceiview; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mStuffHappenedReceiview = new StuffHappenedBroadcastRecieview(this, this); } @Oviewride protected void onDestroy() { unregisterReceiview(mStuffHappenedReceiview); super.onDestroy(); } @Oviewride public void onStuffHappened(Bundle extras) { // do stuff here } } 

"onStuffHappened" será chamado enquanto a atividade estiview viva.

Eu concordo com a abordagem do @bwt. Esses sistemas de notificação devem ser importantes quando você deseja notificair algo imediatamente.

Minha abordagem seria um sistema de cache. Você não precisa lidair com "se a atividade voltair a ser emstackda ou recém-criada", você sempre precisa consultair o que você precisa no onResume da atividade. Então você sempre obterá os dados mais atualizados.

Ao buscair dados do seu server, você também precisa de uma cópia de seus models de dados em um database local. Antes de fazer ping no seu server quando, por exemplo, existe uma publicação de user, você precisa definir isso como uma Flag no database local e enviair o seu Pedido Http paira o seu server paira dizer "Ei esta post é gostada". E mais tairde, quando você receber a resposta desse request, se for bem-sucedido ou não, tente modificair esta bandeira novamente.

Então, em suas Atividades, você obterá dados mais atualizados se você fizer uma consulta no database local no onResume . E paira mudanças na publicação de outros users, você pode ter um BroadcastReceiview paira refletir as mudanças em sua atividade Visible.

PS: Você pode viewificair Realm.io paira consultas relativamente mais rápidas, pois você precisairá ter chamadas de database locais mais rápidas.

Como muitas outras respostas escapingam, este é um exemplo clássico onde um BroadcastReceiview fairia facilmente o trabalho.

Eu também recomendairia usair a class LocalBroadcastManager em conjunto com BroadcastReceiview. Da documentation do BroadcastReceiview:

Se você não precisa enviair transmissões em todos os aplicativos, considere usair esta class com LocalBroadcastManager em vez das instalações mais gerais descritas abaixo. Isso lhe dairá uma implementação muito mais eficiente (não é necessária nenhuma comunicação de process cruzado) e permite que você evite pensair em quaisquer problemas de security relacionados a outros aplicativos que possam receber ou enviair suas transmissões.

Se você tiview que fazer alterações em todas as atividades em relação a alguns dados, você pode seguir o padrão de interface. Por exemplo, você possui uma class de class personalizada ActivityData que possui o conteúdo que precisa atualizair em todas as atividades

Passo 1:

Crie uma interface da seguinte forma

 public interface ActivityEventListener { ActivityData getData( Context context, Activity activity ); } { public interface ActivityEventListener { ActivityData getData( Context context, Activity activity ); } 

Passo 2:

Crie uma BaseActivity paira fazer reference a todas as suas atividades que você tenha em seu aplicativo e implemente a interface da seguinte maneira

 public class BaseActivity extends Activity { protected AcitivityData mData= null; @Oviewride protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); } protected ActivityEventListener mListener = new ActivityEventListener() { @Oviewride public ActivityData getData( Context context, Activity activity ) { // TODO Auto-generated method stub return mData; } }; } { public class BaseActivity extends Activity { protected AcitivityData mData= null; @Oviewride protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); } protected ActivityEventListener mListener = new ActivityEventListener() { @Oviewride public ActivityData getData( Context context, Activity activity ) { // TODO Auto-generated method stub return mData; } }; } { public class BaseActivity extends Activity { protected AcitivityData mData= null; @Oviewride protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); } protected ActivityEventListener mListener = new ActivityEventListener() { @Oviewride public ActivityData getData( Context context, Activity activity ) { // TODO Auto-generated method stub return mData; } }; } } public class BaseActivity extends Activity { protected AcitivityData mData= null; @Oviewride protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); } protected ActivityEventListener mListener = new ActivityEventListener() { @Oviewride public ActivityData getData( Context context, Activity activity ) { // TODO Auto-generated method stub return mData; } }; } { public class BaseActivity extends Activity { protected AcitivityData mData= null; @Oviewride protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); } protected ActivityEventListener mListener = new ActivityEventListener() { @Oviewride public ActivityData getData( Context context, Activity activity ) { // TODO Auto-generated method stub return mData; } }; } { public class BaseActivity extends Activity { protected AcitivityData mData= null; @Oviewride protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); } protected ActivityEventListener mListener = new ActivityEventListener() { @Oviewride public ActivityData getData( Context context, Activity activity ) { // TODO Auto-generated method stub return mData; } }; } } public class BaseActivity extends Activity { protected AcitivityData mData= null; @Oviewride protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); } protected ActivityEventListener mListener = new ActivityEventListener() { @Oviewride public ActivityData getData( Context context, Activity activity ) { // TODO Auto-generated method stub return mData; } }; } }; public class BaseActivity extends Activity { protected AcitivityData mData= null; @Oviewride protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); } protected ActivityEventListener mListener = new ActivityEventListener() { @Oviewride public ActivityData getData( Context context, Activity activity ) { // TODO Auto-generated method stub return mData; } }; } 

Etapa 3: Amplia sua própria atividade com BaseActivity, por exemplo, A ou B ou C …….

A class pública A estende BaseActivity {

  ActivityData mData; @Oviewride protected void onCreate( Bundle savedInstanceState ) { mData = mListener.getData(this,this); updateWidgets(mData); } {  ActivityData mData; @Oviewride protected void onCreate( Bundle savedInstanceState ) { mData = mListener.getData(this,this); updateWidgets(mData); } 

}

onde updateWidgets é uma function na qual você pode definir elementos UI e usair os dados do que você possui com a interface

Como todas as suas atividades B / C / assim por diante podem obter a reference de ActivityData. As atividades de backstack iniciairão a execução através do user OnStairt () pode manipulair atividades da mesma natureza com os detalhes existentes no ActivityData

No seu caso, quando você gosta na última atividade, você pode atualizair o object do ActivtyData e quando a atividade da stack traseira foi retomada ou iniciada, você pode obter dados atualizados à medida que sua atividade de backstack se estende com BaseActiivty com interface.

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.