0

Big nerd Ranch Android Programming book から学んでいる Android プロジェクトのモデル レイヤーには、次のような特定のシングルトン モデル レイヤー クラスがあります。

 public class ModelLayerClass          
 {
 private static ModelLayerClass class_instance;   //its a clear singleton here ! 
 private Context context_instance;

 private ModelLayerClass(Context appContext)  //why this parameter is being passed?
 {
 context_instance = appContext;             //how this helps  here ?    
 }
 public static ModelLayerClass get(Context c)
 {
 if(class_instance=null)
  {
     class_instance = new ModelLayerClass(c.getApplicationContext());
   }
return class_instance;
 }
} 

私が本を読んだとき、シングルトンが「アクティビティを開始」し、プロジェクトリソースにアクセスし、アプリのプライベートストレージを見つけたり、その他のものを見つけたりすることを可能にする Context パラメータを持つことは、Android では一般的な方法であると述べていました。プロジェクトのクラスには、これらすべてへのデフォルトのアクセス権があります (アクティビティの開始を除く)。誰かが適切なオンライン リソースに案内してくれますか、またはこれについて適切な説明をしてくれませんか... thnx :)

4

1 に答える 1

1

アクティビティから、アプリケーション内のすべてにアクセスできますが、通常はコンテキストを使用します。Contextの Android ドキュメントは次のとおりです。

たとえば、あなたが書くとき

startActivity(new Intent(MainActivity.this, NewActivity.class));

Activity クラスが Activity を拡張しているため、startActivity メソッドにしかアクセスできません。シングルトンまたは別のクラスなどからアクティビティを開始する場合は、アクティビティを開始するための Context が必要です。

たとえば、上記と同じアクティビティを Activity クラスの外から開始したい場合は、次のコンテキストが必要です。

context.startActivity(new Intent(context, NewActivity.class));

Activity クラスの外で実行したい他の多くのことについても同じことが言えます。

リソースへのアクセス:

Bitmap imageFromRes = BitmapFactory.decodeResource(context.getResources(), R.drawable.image);

新しい Android ビューの作成:

ImageView iv = new ImageView(context);

基本的に、Context は、Android 以外のクラスが Android クラスで使用するメソッド (Activity、Service、Dialog など) を引き続き利用できるようにする優れた「キャッチオール」パラメーターです。

于 2013-08-15T17:31:04.960 に答える