2013-05-17 30 views
2

我试图调用一个方法,当用户启动我的应用程序(无论是新鲜推出,还是隐藏在家中buttton后回到它)如何在应用程序启动过程中触发一种方法? (Android)

对于iOS,我们可以把方法在AppDelegate.m的“applicationDidBecomeActive”中,因此该方法将在应用程序启动时调用。

但是,对于Android,如果我们在第一个活动中放入onResume()中的方法,则不仅应用程序启动会调用该方法,而且支持从同一应用中其他活动的第1个活动也会调用该方法。我不希望发生这种情况,我只想在应用启动时调用该方法。

我问它in the past,但似乎在Android上没有答案。

任何解决方案?非常感谢。

+0

那么你不应该已经接受了部分答案创建BaseActivity(借助onStart,的onStop) 。或者你需要问两个不同的问题,每个问题都是针对ios和android。 –

回答

2

您可以实现自己的应用程序类。 MyApplication extends Application并在清单文件AndroidManifest.xml中将其设置为您的应用程序。

<application 
    android:name="MyApplication" 
    . 
    . 
    . > 
    </application> 

MyApplication类,实施onCreate()onTerminate()方法。

onCreate()方法调用应用程序时开始,任何活动,服务,或接收器对象之前(不包括内容提供者)已被创建。

docs的应用。

+0

如果应用程序从后台恢复(不是由系统重新创建) - 应用程序的“onCreate”方法将不会被调用。 – makovkastar

+0

这似乎很合乎逻辑。让我试试看,谢谢! –

+0

我试过这种方法,但似乎有一些限制。由于该类扩展了“应用程序”,所以我的方法不再起作用,因为它要求类正在扩展“活动” –

0

您可以定义为您的所有活动和超跟踪应用程序的状态。如果所有活动都处于停止状态 - 应用程序在后台,否则 - 在前台。在您的超级活动的onStart()onStop()方法中,您可以增加和减少可见活动的数量。然后在onStart()检查是否有任何当前可见的活动。如果没有 - 的应用程序被激活,你可以打电话给你的方法:

public class SuperActivity extends Activity { 
    private static int mVisibleActivitiesCount; 

    @Override 
    public void onStart(){ 
     super.onStart(); 
     if (mVisibleActivitiesCount == 0) { 
      onAppBecomesActive(); 
     } 
     mVisibleActivitiesCount++; 
    } 

    @Override 
    public void onStop(){ 
     super.onStart(); 
     mVisibleActivitiesCount--; 
    } 

    private void onAppBecomesActive() { 
     // Do some staff 
    } 
} 
0

有没有一种方法被称为只有当从后台应用程序的回报,但你可以实现的东西,你可以实现这样的东西,看看该应用程序从背景开始或最初开始。创建将由其他所有的活动扩展一般的活动,并覆盖在onStart():

public abstract class CustomActivity extends FragmentActivity { 

public static int ACTIVITIES_RUNNING = 0; 

    @Override 
protected void onStart() { 
    super.onStart(); 
    if (ACTIVITIES_RUNNING == 0) { 
     //app came from background 
     //start whatever you want 
    } 
    Const.ACTIVITIES_RUNNING++; 
} 

}

0

首先在前台计数活动

public class ActivitiesCounter { 

    public interface ApplicationLaunchListener{ 
     public void onLaunch(); 
    } 

    private int mCounter = 0; 

    private ApplicationLaunchListener mListener; 

    private static ActivitiesCounter mInstance = new ActivitiesCounter(); 

    public static ActivitiesCounter getInstance(){ 
     return mInstance; 
    } 

    public void increase(){ 
     if(mCounter == 0){ 
      if(mListener != null){ 
       mListener.onLaunch(); 
      } 
     } 
     mCounter++; 
    } 

    public void decrease(){ 
     mCounter--; 
    } 

    public void setApplicationLaunchListener(ApplicationLaunchListener listener){ 
     mListener = listener; 
    } 

} 

然后活动创造单:

public class MyActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ActivitiesCounter.getInstance().setApplicationLaunchListener(new ActivitiesCounter.ApplicationLaunchListener() { 
      @Override 
      public void onLaunch() { 
       Toast.makeText(MyActivity.this, "launched", Toast.LENGTH_LONG).show(); 
      } 
     }); 

     findViewById(R.id.btn_activity_b).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MyActivity.this, ActivityB.class); 
       startActivity(intent); 
      } 
     }); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     ActivitiesCounter.getInstance().increase(); 
    } 

    @Override 
    protected void onStop() { 
     ActivitiesCounter.getInstance().decrease(); 
     super.onStop(); 
    } 
} 

活动B也应该增加和减少计数器

public class ActivityB extends Activity { 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     ActivitiesCounter.getInstance().increase(); 
    } 

    @Override 
    protected void onStop() { 
     ActivitiesCounter.getInstance().decrease(); 
     super.onStop(); 
    } 
} 

它更好地为应用中的所有活动(然后,你不需要覆盖在onStart,的onStop每次)

相关问题