2017-06-06 66 views
-5

我是相當新的Android和有把握上下文和所有的概念的問題。應用程序崩潰,因爲「背景」問題

我有一個小應用程序,由3個活動:

1-主要活動

2-登錄活動

3-飛濺活動

我已經創建了許多作爲MainActivity的一部分並作爲其一部分運行的類。其中一個類是數據庫幫助程序。數據庫幫助需要上下文中使用和我做的是,在MainActivity:

public static Context context; 

和的onResume我做的:

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

    this.context = this; 
} 

所有活動工作得很好,spalsh作品,登錄工作,一切正常精細。我已經在Manifest中定義了一切。

但隨機當我離開我的應用程序在後臺運行一段時間,做其他的東西,我的電話,並打開它,有時它只是崩潰指向一個獲得「上下文」作爲自變量的函數。

有什麼我可以做些什麼來解決這個問題?

謝謝

+0

顯示異常,它是styacktrace –

+0

我認爲你的上下文不應該是靜態的,它會根據活動和所有東西進行更改,因此最好爲每個活動創建單獨的上下文,以便解決問題。 –

+0

不要泄漏活動背景 – k0sh

回答

1

這是發生,因爲誰給那後臺任務的活動不是在崩潰時活着。所以你需要在那裏使用應用程序上下文。

簡單的方法來做到這一點是

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

    this.context = this.getApplicationContext(); 
} 

是的語境下,你定義(public static Context context;)不應該是靜態的。 (儘管這不是造成問題的你,最好的做法是不要使上下文爲靜態)。


你應該閱讀有關What is 'Context' on Android?App crashes because of "context" issue。不必上下文靜態引用,因爲它們可能會導致內存泄漏

1

使用ActivityName.this替換context.Your問題將被解決。

+0

這是如何和活動名稱。這是不同的,如果他使用ino onresume? –

+0

我試過使用MainActivity.this,但我得到的錯誤:錯誤:(25,31)錯誤:不是一個封閉類:MainActivity我不知道如何解決,要麼....任何幫助? – Arn

+0

什麼是錯誤? –

2

避免的,你可以看到這篇blog article它。 由於活動本身就是一個上下文,因此可以使用ActivityName.this將它傳遞給其他類。

1

應用程序崩潰,你只能使用「this」關鍵字來分配的參考。 「this」關鍵字指向當前對象。當在後臺應用時,「this」可以引用另一個對象。因此,爲了避免崩潰,將關鍵字「this」與活動名稱(如MainActivity.this)綁定在一起,其中MainActivity是您當前的活動名稱。