AWS SDK包含的参考背景 - Android电子
我使用AWS SDK为Android在我的Android应用程序,使用DynamoDB,Cognito等AWS SDK包含的参考背景 - Android电子
目前我使用一个单一的MainActivity
类的碎片,其中有不少是全屏幕。我MainActivity
包含AWSHelper
I类由包含我需要DynamoDB通信的所有引用,请用Cognito等AWSHelper
类也有以拥有它,改变片段和对话框和任何的MainActivity
的参考,需要上下文。我之前保留对我的AWSHelper
类的静态引用,但我觉得这不是使用此类AWSHelper
类的最佳或唯一方法。
请注意:以下大多数物体都是参照MainActivity
的上下文创建的。
下面是一些参考的一个例子
private DynamoDBMapper dynamoDBMapper;
private AmazonDynamoDBClient ddbClient;
private CognitoUserPool userPool;
private CognitoUser cognitoUser;
//Created with a reference to context
userPool = new CognitoUserPool(mainActivity.getBaseContext(), POOL_ID, CLIENT_ID, CLIENT_SECRET, new ClientConfiguration());
我想用其他活动,或做一些我目前的碎片进入活动,但我没有这样做,因为我不知道维护我目前与DynamoDB和Cognito一起使用的引用的最佳方法,无需重新创建它们或将它们作为静态引用放置,但这并不具吸引力,因为这些字段包含Context
引用,这是不好的做法。然而,最大的原因是,在前台有一个新的Activity并且MainActivity上下文不再是应该使用的时候,使用CognitoUserPool或其他重要的MainActivity上下文创建的参考使用。
在我的MainActivity
类中,我有一个参考AWSHelper awsHelper;
来访问和执行几乎所有与AWS相关的功能。在我所有的片段需要访问AWS,在onCreate()
,我有
main = (MainActivity) getActivity; awsHelper = mainActivity.awsHelper
下面是一个场景,我试图打开存储在DynamoDB的数据的用户配置文件,我通常会叫awsHelper.openProfile(user);
方法openProfile()
将启动加载配置文件的AsyncTask,然后将片段更改为包含所有数据的ProfileFragment。
记住我的AWSHelper类不是片段,其中的方法在应用程序中的任何地方都是必需的。
任何有AWS SDK经验的人都可以详细说明他们是如何做到的?
某些示例应用程序(如https://github.com/awslabs/aws-sdk-android-samples/tree/master/AmazonCognitoYourUserPoolsDemo/app/src/main/java/com/amazonaws/youruserpools中的应用程序)似乎使用之前使用的方法 - 使用静态引用。然而,这是一个小例子,有1项活动,而且更简单。
我唯一的想法是将前面提到的所有AWS引用保留为静态引用,但是每次切换活动时都会重新创建AWSHelper,并引用新的当前上下文,但这仍然会导致旧问题MainActivity上下文仍在被引用CognitoUserPool等
感谢您提前的所有帮助!
的AWSHelper类也必须拥有它
有你的错误在MainActivity参考:结合该助手到一个单一的活动,当你真的只需要一个语境与FragmentManager。
因此,我建议你创建一个Application类,将它添加到你的清单,并在那里重新定位你的AWS类。
public class MyApplication extends Application {
private AwsHelper aws;
// etc
public void onCreate(...) {
userPool = new CognitoUserPool(this, POOL_ID, CLIENT_ID, CLIENT_SECRET, new ClientConfiguration());
}
需要注意的是,类似的活动,应用类也扩展上下文,您可以使用getApplicationContext()
,或者使你的应用程序类保持静态引用。
值得指出的是,你不应该存储您在明文APP_ID和SECRET_KEY您的应用程序中,但是这是一个单独的讨论
上下文引用不坏的做法。活动参考是。您可以使用Application类或其他单例'ContextWrapper'类型对象 –