ホームページ Java &#&チュートリアル Android のグローバル変数とローカル変数

Android のグローバル変数とローカル変数

Jan 23, 2017 pm 01:16 PM

グローバル変数は、名前が示すように、クラス全体または複数の関数で呼び出すことができる変数です。外部変数とも呼ばれます。ローカル変数は、特定のプロシージャまたは関数内でアクセスできる変数です。変数を宣言するのは非常に簡単ですが、実際に使用するとなると、想像するほど簡単ではありません。私の場合、グローバル変数を定義して使用することが多いのですが、これのためだけにグローバル変数を定義します。また、多くの紆余曲折を免れました。

Android のグローバル変数とローカル変数

アダプターを使用する場合、通常、アダプターは常に listView とともに使用されます。これは、listView には基本的に listView の項目のレイアウトがあるためです。次のシナリオは次のとおりです。各項目に ImageView があり、項目をクリックすると、項目の ImageView の背景色を変更するか、別の背景画像に変更する必要があります。このとき、最初の項目をクリックすると 3 番目の項目または 2 番目の画像が表示されることがあります。記事も変わってます。これは、グローバル変数を定義しているためです。コード部分は次のとおりです:

public class  Adapter extends BaseAdapter {
private ImageView img;

  public View getView(int position, View convertView, ViewGroup parent) {
  convertView = mInflater.inflate(R.layout.group_listview_item,null);
  img = (ImageView) convertView.findViewById(R.id.logo);

  return convertView;

  }
}
ログイン後にコピー

上記の部分では、ImageView はグローバル変数です。このとき、ImageViewをローカル変数として定義する必要があります

 public class  Adapter extends BaseAdapter {
 public View getView(int position, View convertView, ViewGroup parent) {
     convertView = mInflater.inflate(R.layout.group_listview_item,null);
     ImageView  img = (ImageView) convertView.findViewById(R.id.logo);
    return convertView;
  } 
}
ログイン後にコピー

このとき、各ItemのImageViewを表します。別の状況では、ショッピング カートを作成するときに、プラスまたはマイナスのアイコンをクリックしてショッピング カート内の商品数を変更できます。数量 num を定義するときは、ローカル変数としても定義する必要があります。 ViewHolderが使えるともっと良いです。

static によって変更された静的変数は、さまざまなクラスやパッケージで使用でき、仮想マシン内で別のメモリを占有することができ、非常に便利です。しかし、プロジェクトの開始後に静的変数を発見しました。あまり良くないこともあります。プロジェクトの崩壊情報を見ると、Mo Ming が空ポインタで異常なエラーを起こしている箇所が多かったことが分かりました。調査の結果、静的の問題である可能性があることが判明しました。プロジェクトでは、ユーザーの情報、つまり User オブジェクトを静的変数に保存しており、エラーが報告された箇所ではこの変数が使用されていることがわかりました。この連絡先の保存方法との関係。同時に、多くのユーザーが、電話に応答した後、または長時間待機した後、アプリケーションを開いたときに、アプリケーションに戻ったときにアプリケーションがクラッシュすることを報告しています。これらのクラッシュは、静的変数の null ポインタに関連しています。 。このように、Androidの開発における静的修正とはStaticでしょうか? static User u = new User(); と定義されている場合はあまり問題ないと言えるかもしれませんが、static User u; と定義されている場合は NULL が発生する可能性が高くなります。もちろん、前のメソッドのプロパティも空である可能性がありますが、null ポインターを避けるためにこれをカプセル化できます。さらに、静的定数は依然として非常に便利です。

では、ログイン情報やグローバル情報はどのように保存すればよいのでしょうか? Google の公式推奨事項と Baidu の専門家の推奨事項に従って、Application から継承したカスタム クラスを使用し、継承したクラス内でグローバルに使用する必要がある変数を定義し、getApplicationContext() を通じて関連する変数を取得して保存するようにする必要があります。ただの変数。

 /** 
     * 自定义的MyApplication继承Application 
     *  
     * @author way 
     *  
     */  
    public class MyApplication extends Application {  
        /** 
         * 引发异常:在一些不规范的代码中经常看到Activity或者是Service当中定义许多静态成员属性。这样做可能会造成许多莫名其妙的 null 
         * pointer异常。 
         */  
      
        /** 
         * 异常分析:Java虚拟机的垃圾回收机制会主动回收没有被引用的对象或属性。在内存不足时,虚拟机会主动回收处于后台的Activity或 
         * Service所占用的内存。当应用再次去调用静态属性或对象的时候,就会造成null pointer异常 
         */  
      
        /** 
         * 解决异常:Application在整个应用中,只要进程存在,Application的静态成员变量就不会被回收,不会造成null pointer异常 
         */  
        private int number;  
      
        @Override  
        public void onCreate() {  
            // TODO Auto-generated method stub  
            super.onCreate();  
        }  
      
        public int getNumber() {  
            return number;  
        }  
      
        public void setNumber(int number) {  
            this.number = number;  
        }  
    }
ログイン後にコピー

ただし、MyApplication を android.app.Application に置き換えてコード内で有効にするには、AndroidManifest.xml を変更する必要があります:

   <application android:name=".MyApplication" ...>      
   </application>
ログイン後にコピー

そうすれば、アクティビティまたはサービスで柔軟に使用できます:

MyApplication application = (MyApplication) this.getApplicationContext();   
    //保存变量  
    application.setNumber(5);  
    //取出变量  
    application.getNumber();
ログイン後にコピー

Applicationつまり、アプリケーションは存在しており、GC によって不可解にリサイクルされることはありません。したがって、このメソッドを使用する方が安全です。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

ARM上のJavaプログラムとX86アーキテクチャCPUのメモリリークの違いは何ですか? ARM上のJavaプログラムとX86アーキテクチャCPUのメモリリークの違いは何ですか? Apr 19, 2025 pm 11:18 PM

さまざまなアーキテクチャCPUでのJavaプログラムのメモリリーク現象の分析。この記事では、JavaプログラムがARMおよびX86アーキテクチャCPUでさまざまなメモリ動作を示すケースについて説明します...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

名前を数字に変換してグループ内でソートを実装する方法は? 名前を数字に変換してグループ内でソートを実装する方法は? Apr 19, 2025 pm 01:57 PM

名前を数字に変換してグループ内でソートを実装する方法は?ユーザーをグループでソートする場合、ユーザーの名前を数字に変換して、異なる可能性があることがよくあります...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

Javaリモートデバッグでは、リモートサーバーで一定の値を正しく取得するにはどうすればよいですか? Javaリモートデバッグでは、リモートサーバーで一定の値を正しく取得するにはどうすればよいですか? Apr 19, 2025 pm 01:54 PM

Javaリモートデバッグでの絶え間ない買収に関する質問と回答は、Javaをリモートデバッグに使用する際に、困難な現象に遭遇する可能性があります。それ...

See all articles