0

我正在尝试使某个功能在用户启动时启动,

  • 首次打开应用程序,
  • 从家里回到应用程序。

但如果用户在应用程序内的活动之间切换,则不会启动。

我已经浏览了这个主题,最好的答案是使用singleTaskwith onNewIntent()。因此,如果用户从主页返回应用程序,onNewIntent则可以使用传递给它的启动器意图的调用。

但是,这是我的代码:

public class AdMobSDK_DFP_Interstitial extends Activity implements AdListener {
    private static final String MOBMAX_INTERSTITIAL_AD_UNIT_ID = "/7732/test_portal7/android_app1_test_portal7/splash_banner_android_app1_test_portal7";
    private DfpInterstitialAd interstitialAd;
    private int num = 0;

    public void onNewIntent(Intent intent){
        super.onNewIntent(intent);
        Log.d("flow", "onNewIntent");

}

如果我在应用程序中的不同活动之间切换,onNewIntent()总是调用,这与我从主页返回应用程序相同。

4

1 回答 1

0

您可以做的第一件事是实现自己的“应用程序”对象,并在创建时让它运行所需的功能。

public class MyApplication extends Application { 
   @Override
   public void onCreate() { 
        // Call your function
   }
}

只要您的应用程序处于活动状态(任何活动/服务仍在运行),您的应用程序对象就会处于活动状态,但请注意,应用程序对象不会在用户按下“Home”时立即销毁,并且可能会保持活动状态一段时间和用户可以在不调用函数的情况下返回它。

如果您需要此功能作为主要活动的一部分运行,只需在您的应用程序上下文中保存一个标志: public boolean alreadyDisplayed = false;然后在您的活动中,onStart您可以调用

if ((MyApplication)getApplication().alreadyDisplayed ) {
    // Call your function
    (MyApplication)getApplication().alreadyDisplayed = true;
}

** 如果此解决方案对您来说还不够,并且您需要在每次从主页显示主要活动时调用您的函数,您将需要做一些不太好的事情......我可以给您的一个建议是实施相同的 Application 对象,但这次带有“打开活动”计数器:

public class MyApplication extends Application { 
   public int mActivityCounter = 0;
}

onStart然后您可以在应用程序中的每个活动上增加此计数器并在每个活动上减少onStop(当然这可以通过实现一个类MyActivity并让所有相关活动继承它来完成。然后您可以使用此计数器来了解是否还有其他活动活动已打开。请注意,您必须确保对该计数器的访问是同步的,并根据需要使用它。

我希望这有帮助...

于 2012-12-06T10:11:56.057 回答