【问题标题】:Implement interface when extending Application class扩展Application类时实现接口
【发布时间】:2015-05-03 23:21:06
【问题描述】:

我需要在多个活动中使用mGoogleApiClient,所以我决定创建一个MyApplication 类,其中extends Application 类:

public class MyApplication extends Application {

    public static GoogleApiClient mGoogleApiClient;
    public Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();

        mGoogleApiClient = new GoogleApiClient.Builder(mContext)
                .addConnectionCallbacks(mContext)
                .addOnConnectionFailedListener(mContext)
                .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN)
                .addApi(Games.API).addScope(Games.SCOPE_GAMES)
                .build();
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
    }
}

但是这两行有问题:

.addConnectionCallbacks(mContext)
.addOnConnectionFailedListener(mContext)

因为我需要实现

GoogleApiClient.ConnectionCallbacksGoogleApiClient.OnConnectionFailedListener

然后重写这些方法:

@Override
public void onConnected(Bundle bundle) {

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}

一般来说,Application 类是否允许 implementinterface,我应该这样做,还是应该从 mGoogleApiClient 中删除这两行并可能在其他活动中初始化它们?

我不知道Application 类将如何处理这些方法和连接状态,以及我是否需要在我的其他活动中再次实现这些方法。

有什么建议吗?

【问题讨论】:

    标签: android interface google-play-services


    【解决方案1】:

    您的MyApplicationApplication 的子类,仅适用于您的应用。 Android 只会使用其中的Application 部分,但你可以实现任何你需要的东西。

    但您应该知道,一次只能有一个应用程序类的实例。

    如果您需要多个回调,例如在它们存储状态的情况下,让MyApplication 实现它们不会因为状态变化而工作得那么好。在这种情况下,实例化内部类会是更好的选择。

    这里看起来你只会使用一次回调,所以让MyApplication 实现它们就可以了。

    应用程序类是实例化 API 客户端等事物的好地方。这样可以确保创建的数量不超过一个,并且始终可用。

    还要注意Application 是一个上下文,因此您可以使用this 代替mContext

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 2012-12-10
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      相关资源
      最近更新 更多