2013-05-17 29 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每次)

相關問題