2017-06-06 11 views
-5

私はかなりアンドロイドに慣れていて、コンテキストとすべての概念を抱く問題があります。 "コンテキスト"の問題のためにアプリケーションがクラッシュする

は私が3つの活動で構成され、小さなアプリを持っている:

の1-主な活動を

2 - ログイン・アクティビティー

スプラッシュ活動は、私が数を作成しました

、3- MainActivityの一部であり、その一部として実行されるクラス。クラスの1つはデータベースヘルパーです。データベースのヘルパーは、使用するコンテキストを必要とし、私がやっていることはMainActivityで、次のとおりです。

public static Context context; 

とonResumeで私は:

@Override 
public void onResume() { 
    super.onResume(); 

    this.context = this; 
} 

すべての活動だけで罰金、spalsh作品、ログイン作品は、すべての作品を働きます良い。私はマニフェストですべてを定義しました。

しかし、アプリをバックグラウンドでしばらく実行しておき、自分の携帯電話で他のものを実行して開くと、「コンテキスト」を引数として取得する関数を指し示すクラッシュが発生することがあります。

私はこれを修正するために何かできますか?

おかげ

+0

例外を表示し、それはstyacktrace –

+0

私はあなたの文脈が静的であってはならないと思います、それはあなたの問題を解決するはずです各アクティビティの別のコンテキストを作成するために、 –

+0

アクティビティーコンテキストが存在しないようにしてください。 – k0sh

答えて

1

これは、クラッシュ時にそのバックグラウンドタスクを呼び出したアクティビティが生きていないために起こります。したがって、そこにApplication Contextを使用する必要があります。そうする

簡単な方法は、あなたが(public static Context context;)で定義され

@Override 
public void onResume() { 
    super.onResume(); 

    this.context = this.getApplicationContext(); 
} 

とはいコンテキストで静的であってはなりません。 (これはあなたに問題を引き起こしていませんが、ベスト・プラクティスは、静的としてコンテキストをしないようにすることです。)


あなたはおよそWhat is 'Context' on Android?App crashes because of "context" issueをお読みください。

1

使用ActivityName.thisはcontext.Yourの問題の置き換えに解決されます。

+0

これとActivityNameの仕組み。彼はino onresumeを使用した場合、これは違うのですか? –

+0

MainActivity.thisを使用しようとしましたが、エラーが表示されます。エラー:(25、31)エラー:囲むクラスではありません:MainActivityどのように修正するかわかりません.... – Arn

+0

エラーはどうなりますか? –

2

メモリリークを引き起こす可能性があるため、Contextへの静的な参照は避けてください。これについてはblog articleを読むことができます。 アクティビティはコンテキストそのものなので、ActivityNameを持つ他のクラスに渡すことができます。

1

"this"キーワードのみを使用して参照を割り当てたため、アプリケーションがクラッシュしました。 "this"キーワードは現在のオブジェクトを指します。バックグラウンドでアプリケーションを使用する場合、「this」は別のオブジェクトを参照できます。したがって、クラッシュを回避するには、キーワード "this"に "MainActivity.this"のようなアクティビティ名を付けます。ここで、MainActivityは現在のアクティビティ名です。

関連する問題