1. 程式人生 > >Android 創建單獨的服務運行在後臺(無界面)

Android 創建單獨的服務運行在後臺(無界面)

diy target 清單文件 manifest col nod actual sts AS

轉自:https://blog.csdn.net/a704225995/article/details/56481934

今天項目有個需求是,開啟一個服務單獨運行在後臺,而且還不能有界面,在度娘搜索了一圈也沒發現可以完美解決的方法,然後自己嘗試解決的方法,開始的思路是,把界面幹掉,也就是activity,然後將開啟Service的操作放在Application中,結果運行程序,在控制臺報錯了。

技術分享圖片

因為我把AndroidManifest.xml中的主Activity的配置給幹掉了,而程序找不到應用的入口,所有就無法打開應用,這種方法行不通。

然後我就想,把Activity保留,但是我不給它 setContentView(......);也就是不給他設置布局文件,

[java] view plain copy
  1. public class MainActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. System.out.println("MainActivity OnCreate()....");
  6. System.out.println("準備開啟服務");
  7. Intent intent = new Intent(MainActivity.this,TestService.class);
  8. startService(intent);
  9. }
  10. }


運行程序,程序打開了,服務也運行了,但是有個問題就是,界面也出來了,為什麽呢?

技術分享圖片

技術分享圖片

原因是在AndroidManifest.xml中Application節點中這個這行代碼android:theme="@style/AppTheme",既然是主題的問題導致界面的出現,那麽是想android是否提供了不顯示界面的主題?查找後問題終於解決了,解決方法:在清單文件中,主activity的配置中添加這行代碼

android:theme="@android:style/Theme.NoDisplay"

代碼:

[java] view plain copy
  1. <application
  2. android:allowBackup="true"
  3. android:icon="@drawable/ic_launcher"
  4. android:label="@string/app_name"
  5. android:theme="@style/AppTheme" >
  6. <activity
  7. android:name=".MainActivity"
  8. android:label="@string/app_name"
  9. android:theme="@android:style/Theme.NoDisplay"
  10. >
  11. <intent-filter>
  12. <action android:name="android.intent.action.MAIN" />
  13. <category android:name="android.intent.category.LAUNCHER" />
  14. </intent-filter>
  15. </activity>
  16. <service android:name="com.example.backgroundservice.TestService" >
  17. </service>
  18. </application>


我們還可以Ctrl+左鍵點進去看看這個主題是怎麽寫的:

[java] view plain copy
  1. <!-- Default theme for activities that don‘t actually display a UI; that
  2. is, they finish themselves before being resumed. -->
  3. <style name="Theme.NoDisplay">
  4. <item name="android:windowBackground">@null</item>
  5. <item name="android:windowContentOverlay">@null</item>
  6. <item name="android:windowIsTranslucent">true</item>
  7. <item name="android:windowAnimationStyle">@null</item>
  8. <item name="android:windowDisablePreview">true</item>
  9. <item name="android:windowNoDisplay">true</item>
  10. </style>


運行程序,服務開啟了,界面也不顯示,完美解決了後臺啟動服務的進程。

Android 創建單獨的服務運行在後臺(無界面)