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等

感谢您提前的所有帮助!

+1

上下文引用不坏的做法。活动参考是。您可以使用Application类或其他单例'ContextWrapper'类型对象 –

的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您的应用程序中,但是这是一个单独的讨论