2012-01-27 71 views
26

此代碼會在啓動系統後自動運行應用程序,但按下後退按鈕後應用程序將關閉。如何在後臺運行Android應用程序?

如果應用程序通過單擊它的圖標正常運行。即使按下後退按鈕或運行其他應用程序,它也會持續運行。

public class AutoBoot extends BroadcastReceiver { 
    @Override   
    public void onReceive(Context context, Intent intent) {     
     Intent i = new Intent(context, MyActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i);   
    } 
} 

我的問題是,如何使這個自動運行的代碼連續運行,即使按後退按鈕或運行其他應用程序後?

回答

16

如果您希望應用程序在後臺運行,您可以在此處啓動Service。這就是Android中的服務 - 在後臺運行並執行長時間操作。

UDPATE

您可以使用START_STICKY,使您的業務持續運行。

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    handleCommand(intent); 
    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 
+0

它將如何爆炸式停止 – 2016-01-10 16:53:44

+0

另外,如何在重新啓動後啓動服務? – 2016-01-10 16:54:34

3

看到的在後臺運行的應用程序無論如何。我假設你真正要問的是如何讓應用程序在後臺執行某些操作。下面的解決方案將使您的應用程序在打開應用程序和系統重新啓動後在後臺執行某些操作。

下面,我已經加入到工作的完整示例的鏈接(在Android Studio項目的形式)

這個題目好像出了Android文檔的範圍,並有不似乎是任何一本綜合性文件。信息分散在幾個文檔中。

以下文檔告訴你間接如何做到這一點: https://developer.android.com/reference/android/app/Service.html

https://developer.android.com/reference/android/content/BroadcastReceiver.html

https://developer.android.com/guide/components/bound-services.html

在讓您的使用需求正確的利益,這上面的文檔的重要組成部分,閱讀仔細是:#Binder,#Messenger和組件鏈接如下:

https://developer.android.com/guide/components/aidl.html

這裏是鏈接到完全工作示例(在Android Studio中格式):http://developersfound.com/BackgroundServiceDemo.zip

該項目將開始其結合的服務的活動;實施AIDL。

該項目對於跨不同應用程序的IPC目的重用也很有用。

該項目還開發了自動啓動時的Android重新啓動(提供的應用程序已運行至少一個安裝後的應用程序是不是SD卡上安裝)當該應用程序/項目重啓後運行

,它動態地使用透明視圖使其看起來沒有應用程序啓動,但關聯應用程序的服務開始乾淨。

此代碼的編寫方式非常容易調整以模擬預定的服務。

該項目是根據上述文檔開發的,隨後是一個乾淨的解決方案。

然而,這個項目的一部分是不乾淨的:我還沒有找到一種方法來重新啓動服務,而無需使用活動。如果你們任何人閱讀這篇文章有一個乾淨的方式來做到這一點,請發表評論。

+0

謝謝 - 我對這一點很感興趣。我在Android Studio中開發了近1年的Android應用程序。我下載了你的zip文件,把它放在一個目錄中,在Android Studio中打開該導演,並在構建時收到這個錯誤。錯誤:配置項目':app'時發生問題。 >無法解析配置':app:_debugApkCopy'的所有依賴關係。 >找不到com.android.support.constraint:constraint-layout:1.0.2。 需要: 項目:應用程序 – 2017-08-17 01:43:15

+0

我猜你的佈局之一是約束佈局依賴不在你的gradle文件時使用約束佈局。如果不是這種情況,請將佈局文件中的約束佈局更改爲普通佈局,並且如果佈局中有與約束佈局相關的任何屬性,請將其刪除。 – user2288580 2017-08-23 21:14:33

+0

當出現新的gradle版本時,通常會出現遷移問題。處理這個問題的最好辦法是用相同的軟件包名稱創建一個新項目並分別移植項目文件。不便之處,敬請原諒。該應用程序已經過徹底測試,所以它的工作。 – user2288580 2018-01-15 03:13:21