当前位置: 代码迷 >> Android >> Android应用是不是可以只有一个Service或Broadcast Reciver,而没有Activity
  详细解决方案

Android应用是不是可以只有一个Service或Broadcast Reciver,而没有Activity

热度:88   发布时间:2016-04-28 03:53:03.0
Android应用是否可以只有一个Service或Broadcast Reciver,而没有Activity?
作者:chenjieb520??
?
Service是android四大组件中与Activity最相似的组件,都可以代表可执行的程序。
?
? ?Service与Activity的区别在于:
? (1)、Service一直在后台运行,没有用户界面。
? (2)、一旦service被启动之后,就跟Activity一样。有自己的生命周期。所以可以没有Activity。
????
? ? 开发service需要两个步骤:
?? (1)、定义一个继承service的子类
???(2)、在AndroidManifest.xml中配置该Service ,其过程和配置Activity一样。
?
Service运行有两种方式:
? ? 【1】、通过Context的startService()方法,通过该方法启动用Service,访问者与service之间没有关联,即使 ? ? ? ? ? ? ? ?访问者退出了,Service仍然运行。
?
? ? ?【2】、通过Context的bingSerive()方法,使用该方法启用Service,访问者和service形成关联,即绑定在一 ? ? ? ? ? ? ? ? ?起,访问退出,Service也退出。
?
?
Broadcast Reciver本质是一种全局的监听器,它可以用来组件之间相互通信。它用来接收程序所发出的Broadcast intent,与应用启动Activity,service相同的是:程序启动Broadcast Reciver也是需要两个步骤
?
? ? 【1】、创建Broadcast Reciver的Intent
? ? 【2】、调用context的sendBroadcase()或者sendorderBroadcase()方法来启动制定的BroadcastReciver
?
? ? 在笔者下面所演示的代码中,将这个service和Broadcast Reciver结合在一起,可以不需要activity。当程序接收一个Broadcast Reciver的时候,就启动service(service也可以通过activity来启动)。这个例子就是开机自己启动服务。开机的时候会进行广播,我们就将这个广播进行接收,然后开启服务!
?
//创建LaunchReceiver.java 这是广播接收器
?
[java] view plaincopyprint?
  1. package?ss.pku.edu.cn;??
  2. ??
  3. import?android.content.BroadcastReceiver;??
  4. import?android.content.Context;??
  5. import?android.content.Intent;??
  6. ??
  7. ??
  8. public?class?LaunchReceiver?extends?BroadcastReceiver??
  9. {??
  10. ????@Override??
  11. ????public?void?onReceive(Context?context,?Intent?intent)??
  12. ????{??
  13. ????????Intent?intent1?=?new?Intent(context?,?MyService.class);??
  14. ????????//?启动指定Server??
  15. ????????context.startService(intent1);??
  16. ????}??
  17. }??
package ss.pku.edu.cn;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class LaunchReceiver extends BroadcastReceiver{	@Override	public void onReceive(Context context, Intent intent)	{		Intent intent1 = new Intent(context , MyService.class);		// 启动指定Server		context.startService(intent1);	}}
?
//创建MyService.java ?这是定义服务
[java] view plaincopyprint?
  1. package?ss.pku.edu.cn;??
  2. ??
  3. ??
  4. import?android.app.Service;??
  5. import?android.content.Intent;??
  6. import?android.os.IBinder;??
  7. ??
  8. public?class?MyService?extends?Service??
  9. {??
  10. ????@Override??
  11. ????public?IBinder?onBind(Intent?intent)??
  12. ????{??
  13. ????????return?null;??
  14. ????}??
  15. ????@Override??
  16. ????public?void?onCreate()??
  17. ????{??
  18. ????????System.out.println("service?create");??
  19. ????}??
  20. }??
package ss.pku.edu.cn;import android.app.Service;import android.content.Intent;import android.os.IBinder;public class MyService extends Service{	@Override	public IBinder onBind(Intent intent)	{		return null;	}	@Override	public void onCreate()	{		System.out.println("service create");	}}

然后在AndroidManifest.xml ?进行添加 权限和action ?
?
[html] view plaincopyprint?
  1. <uses-sdk?android:minSdkVersion="8"?/>??
  2. <uses-permission?android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>??
  3. ??
  4. <application??
  5. ????android:icon="@drawable/ic_launcher"??
  6. ????android:label="@string/app_name"?>??
  7. ????<receiver?android:name=".LaunchReceiver">??
  8. ????????<intent-filter>??
  9. ????????????<action?android:name="android.intent.action.BOOT_COMPLETED"/>??
  10. ????????</intent-filter>??
  11. ????</receiver>??
  12. ??????
  13. ????<service?android:name=".MyService">??
  14. t;/service>??
  15. ??
  16. </application>??
    <uses-sdk android:minSdkVersion="8" />    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>    <application        android:icon="@drawable/ic_launcher"        android:label="@string/app_name" >        <receiver android:name=".LaunchReceiver">            <intent-filter>                <action android:name="android.intent.action.BOOT_COMPLETED"/>            </intent-filter>        </receiver>                <service android:name=".MyService">		</service>    </application>


这样的话,就可以做到开机的时候运行服务,这种方式,相信大家在开发android的时候,会经常被用到。希望这个小知识点能够对大家开发android的过程中有所帮助,欢迎大家批评指教。
  相关解决方案