-
常用系统服务: 后台Service在系统启动时被SystemServer开启: 1.MountService:监听是否有SD卡安装及移除 2.ClipboardService:提供剪切板功能 3.PackageManagerService:提供软件包的安装移除及查看 4.电量,网络连接状态等等 使用的时候通过getSystemService()的方法来实现: 这是一个Activity的一个方法,通过传入name->object>服务对象 WINDOW_SERVICE -- WindowManager -- 管理打开的窗口程序 LAYOUT_INFLATER_SERVICE -- LayoutInflater -- 取得XML里定义的View ACTIVITY_SERVICE -- ActivityManager -- 管理应用程序的系统状态 POWER_SERVICE -- PowerManger -- 电源服务 ALARM_SERVICE -- AlarmManager -- 闹钟服务 NOTIFICATION_SERVICE -- NotificationManager -- 状态栏服务 KEYGUARD_SERVICE -- KeyguardManager -- 键盘锁服务 LOCATION_SERVICE -- LocationManager -- 位置服务,如GPS SEARCH_SERVICE -- SearchManager -- 搜索服务 VEBRATOR_SERVICE -- Vebrator -- 手机震动服务 CONNECTIVITY_SERVICE -- Connectivity -- 网络连接服务 WIFI_SERVICE -- WifiManager -- Wi-Fi服务 TELEPHONY_SERVICE -- TelephonyManager -- 电话服务查看全部
-
服务的两种启动方式: 1.通过startService(Intent intent)启动,stopService(Intent intent)停止,比较简单。服务启动后与启动源无关,也无返回服务本身。需注意要在配置文件中注册服务。 2.通过bindService(Intent intent,ServiceConnection conn,int flags)绑定服务启动,unbindService(ServiceConnection conn)去绑定停止,该方式可以返回服务本身,与启动源相关。 具体步骤: 1)Intent intent = new Intent(上下文, 目标服务名.class); bindService(intent, conn, Service.BIND_AUTO_CREATE);//绑定 2)在自定义的服务类中通过自定义一个内部类: public class MyBinder extends Binder { public MyBindService getService() { return MyBindService.this;// 获取服务 } }来返回服务本身 同时在自定义服务类重新父类Service的方法: public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return new MyBinder(); } 该方法可返回服务本身. 3)初始化ServiceConnection接口,在接口方法中重写方法 public void onServiceConnected(ComponentName name, IBinder service) { myBindService = ((MyBinder)service).getService();//大类转化为自身的小类,获取内部类中的方法,从而获得服务本身 } 4)在自定义的继承于Servic类的类中,添加需要的方法,在启动Service的Activity中可以直接调用服务中的方法。查看全部
-
使用onBind()方法的IBinder返回值给启动源返回信息 但是IBinder不能直接使用 需要通过Ibinder接口实例 返回一个ServiceConnection对象给启动源,通过ServiceConnection对象的相关方法可以得到Service public class MyBinder extends Binder{ public MyBindServic getService(){ return MyBindService.this; } } public IBunder onBind(Intent intent){ return new MyBinder(); } 在启动源定义ServiceConnection 该对象在绑定服务时传输到服务端(bindService(intent,conn,Service.BIND_AUTO_CREATE)) 绑定后 通过onServiceConnected() 方法获取service对象查看全部
-
@Bind启动——(下) public class MyBindService extends Service { @Override public void onCreate() { Log.i("TAG", "BindService_onCreate"); super.onCreate(); } @Override public void unbindService(ServiceConnection conn) { Log.i("TAG", "BindService_unbindService"); super.unbindService(conn); } public class MyBinder extends Binder{ public MyBindService getService(){ return MyBindService.this;//返回当前服务对象 } } @Override public IBinder onBind(Intent intent) { Log.i("TAG", "BindService_onBind"); return new MyBinder();//返回一个数据类 } @Override public void onDestroy() { Log.i("TAG", "BindService_onDestroy"); super.onDestroy(); } public void play(){ Log.i("TAG", "播放"); } //其他三个类似 }查看全部
-
@Bind启动——(中) public class MainActivity extends Activity { Intent intent1; Intent intent2; MyBindService bindservice; ServiceConnection conn=new ServiceConnection() { @Override//当启动源跟Service的连接意外丢失的时候会调用这个方法,但是当Service取消绑定是不会调用这个方法的。如:当Service崩溃了或被强行杀死了。 public void onServiceDisconnected(ComponentName name) { } @Override//当启动源跟Service成功连接之后将会自动调用这个方法 public void onServiceConnected(ComponentName name, IBinder binder) { bindservice=((MyBinder)binder).getService(); } }; @Override protected void onCreate(...) { ... } @Override protected void onDestroy() {//如果结合使用startService(Intent intent),一定要调用这个重写这个方法。 super.onDestroy(); stopService(intent2); unbindService(conn); }查看全部
-
@Bind启动——(上) public void doClick(View v){ switch (v.getId()) { case R.id.start: intent1=new Intent(MainActivity.this, MyStartService.class); startService(intent1); break; case R.id.stop: stopService(intent1); break; case R.id.bind: intent2=new Intent(MainActivity.this,MyBindService.class); startService(intent2);//有必要时推荐:结合使用 bindService(intent2, conn, BIND_AUTO_CREATE);//第三个参数:自动创建 break; case R.id.play: bindservice.play(); break; ...//其他三个类似 case R.id.unbind: unbindService(conn); break; } } Ps1:StartService开启后onCreate只会调用一次,再点击StartService不会再调用,直接调用onStartCommand;而BindService开启后onCreate和onBind都只调用一次,再点击也不会调用。 Ps2:StopService点击多次,只调用一次,但是不会报错;而UnBindService点击多次,虽只调用一次,但是会报错。 @启动源(个人理解:Activity): Start方式:可以不需要界面(UI),但是服务还存在,但是数据不能返回。 Bind方式:与界面共存亡。 -有必要推荐Start与Bind一起结合使用。查看全部
-
StartService 1. 使用方法: (1)写一个MyStartService继承自Service,重写它的各种方法onCreate()、onStartCommand()、onDestory() (2)在AndroidManifest.xml中注册这个Service (3)在主线程Activity中通过startSerice(intent)方式启动 (4)通过stopService(intent)方式停止 2. 关于StartService (1)启动方式是通过启动intent方式实现 (2)启动之后该Service和启动源没有关系,即使主线程退出了,service还会继续运行查看全部
-
@Service启动与停止 public void doClick(View v){ switch (v.getId()) { case R.id.start: intent1=new Intent(MainActivity.this, MyStartService.class); startService(intent1); break; case R.id.stop: stopService(intent1); break; } } //另类 public class MyStartService extends Service { @Override public void onCreate() { Log.i("TAG", "Service_onCreate"); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("TAG", "Service_onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { Log.i("TAG", "Service_onDestroy"); super.onDestroy(); } @Override public IBinder onBind(Intent intent) { return null; } } Ps:开启后onCreate只会调用一次,再点击StartService不会再调用,直接调用onStartCommand。查看全部
-
startService 1.创建myStartService继承Service并实现onCreate()onStartCommand()onDestory()方法 2.在AndroidManifest文件中注册这个service 3.在主线程Activit中通过startService(intent)启动服务 通过stopService(intent)停止 启动方式是通过启动intent方式实现查看全部
-
Service的启动方式查看全部
-
1.定义: 后台运行,不可见,没有界面 优先级高于Activity 2.用途: 播放音乐、记录地理信息位置的改变、监听某种动作 3.注意: 运行在主线程,不能用它来做耗时的请求或者动作 可以在服务中开一个线程,在线程中做耗时动作 类型: 1.本地服务(Local Service)应用程序内部 (1)startService stopService stopSelf stopSelfResult (2)bindService unbindService Start方式的特点: 服务跟启动源没有任何联系 无法得到服务对象 Bind方式特点: 通过IBinder接口实例,返回一个ServiceConnection对象给启动源 通过ServiceConnection对象的相关方法可以得到Service对象 2.远程服务(Remote Service)Android系统内部的应用程序之间 定义IBinder接口查看全部
-
服务分两种:本地服务和远程服务。<br> 本地服务是程序内的服务有两套启动机制(startService、stopService、stopSelf、stopSelfResult)和(bindService、unbindService)<br> 远程服务是同一个Android系统中的应用程序间的服务。有IBinder接口查看全部
-
四大组件之Service: (1)后台运行,不可见,没界面,优先级高于Activity (2)用于播放音乐、记录地理信息位置的改变,监听某种动作等查看全部
-
@异步广播 private BC3 bc3;//全局变量 case R.id.button3://异步广播 Intent intent3=new Intent(); intent3.putExtra("msg", "这是一条异步广播!"); intent3.setAction("BC_Three"); sendStickyBroadcast(intent3); //若先发消息后注册可以成功,则有异步效果。 IntentFilter intentFilter=new IntentFilter("BC_Three"); intentFilter.setPriority(100); bc3=new BC3(); registerReceiver(bc3, intentFilter); break; //动态注册的必须销毁APP时解除注册 @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(bc3); } <uses-permission android:name="android.permission.BROADCAST_STICKY"></uses>查看全部
-
发送普通广播 sendBroadcast(intent); 发送有序广播 sendOrderedBroadcast(intent2,null); <intent,receiverPermission> 中断广播 abortBroadcast();查看全部
举报
0/150
提交
取消