【发布时间】:2014-09-21 18:58:40
【问题描述】:
我希望能够在创建 GoogleApiClient obj 的活动(主要活动)之外的其他活动中更新我的排行榜分数。
最好的方法是什么?
以正确的方式使 obj 可打包吗?如果是这样,如果该类是库的一部分,你怎么能做到这一点。
你能把 obj 设为静态吗?安全吗?
任何关于如何实现这一点的建议都会很棒。
【问题讨论】:
标签: android android-activity google-play-services
我希望能够在创建 GoogleApiClient obj 的活动(主要活动)之外的其他活动中更新我的排行榜分数。
最好的方法是什么?
以正确的方式使 obj 可打包吗?如果是这样,如果该类是库的一部分,你怎么能做到这一点。
你能把 obj 设为静态吗?安全吗?
任何关于如何实现这一点的建议都会很棒。
【问题讨论】:
标签: android android-activity google-play-services
您可以使用 Application 类,这是一个面向 android 的单例模式类,它可以是您的 ApiClient 调用的基类。
这里是API 文档的链接,这里有一些examples 以及为什么使用Application over Singleton 的论据。
【讨论】:
好的,我想我会回答我自己的问题,因为我找到了一种目前适合我的方法。 其中很多来自另一个已回答的问题here!
此方法使用 basegameutil,因此从链接中 Lee 的回答中,我可以让我的两个活动都扩展 BaseGameActivity 并添加所需的方法。
然后我在我的第二个活动中创建一个新的 GoogleApiClient 实例,然后像这样获取 api 客户端:
mGoogleApiClient = getApiClient();
我现在可以在我的第二个活动中传递它并按照我的意愿调用方法。
正如 Lee States 在他的回答中所说,您可以拥有多个 google api 客户端实例,并且仍然不会被要求为每个实例登录,因为它知道您已经登录。
【讨论】:
我真正的考验是: 1. 不能将 GoogleApiClient 作为对象传递给另一个服务或活动,将其用作 Intent 参数。 2. 使用 Singleton 类解决如下: + 第 1 步:制作包含 GoogleApiClient 对象作为数据成员的 Singleton 类。请这样做:
import com.google.android.gms.common.api.GoogleApiClient;
public class MyGoogleApiClient_Singleton {
private static final String TAG = "MyGoogleApiClient_Singleton";
private static MyGoogleApiClient_Singleton instance = null;
private static GoogleApiClient mGoogleApiClient = null;
protected MyGoogleApiClient_Singleton() {
}
public static MyGoogleApiClient_Singleton getInstance(GoogleApiClient aGoogleApiClient) {
if(instance == null) {
instance = new MyGoogleApiClient_Singleton();
if (mGoogleApiClient == null)
mGoogleApiClient = aGoogleApiClient;
}
return instance;
}
public GoogleApiClient get_GoogleApiClient(){
return mGoogleApiClient;
}
}
第 2 步:在主 Activity 类中初始化一个 GoogleApiClient 对象,然后使用 mGoogleApiClient 作为 Singleton 基类的参数调用 getInstance。
第 3 步:在您想要传递 GoogleApiClient 对象的另一个服务/活动中,只需调用 Singleton 基类的 getInstance(null),然后调用 get_GoogleApiClient 即可获取所需的 GoogleApiClient 对象。
如果您有任何问题,请联系我 thienpham2008@gmail.com。
【讨论】:
如果您需要不断连接到 GoogleApiClient,那么我可能会创建一个单例类来处理 GoogleApiClient 调用 (http://en.wikipedia.org/wiki/Singleton_pattern) 或创建一个在整个应用生命周期中运行的后台服务 (https://developer.android.com/training/best-background.html)。
From the developer documentation:
GoogleApiClient 与多种静态方法一起使用。一些 这些方法需要连接 GoogleApiClient,有些会 在连接 GoogleApiClient 之前排队呼叫;检查具体 API 文档以确定您是否需要连接。
如果您不需要立即发送数据,GoogleApiClient 会将要发送的数据排入队列,然后在主 Activity 中发送。
【讨论】: