一、服务

1.1、后台运行、不可见、没有界面,优先级高于activity,主要用于组件之间交互和执行后台任务。同样在主线程中运行,不能做耗时操作,超过20S会出现ANR。

1.2、 本地服务Local Service:应用程序内部--startService/stopService/stopSelf/stopSelfResult--bindSrevice/unbindService。两种启动模式可以同时运行,在销毁服务时,只有两种模式都不在使用Service时候,才可以销毁服务,否则会引起异常。

1.3、远程服务Remote Service:系统内部应用程序之间--通过定义IBind接口将数据暴露出来

1.4、生命周期:

1.5、服务优先级:服务默认启动方式是后台服务,但是可以通过设置服务为前台服务,提高服务的优先级,进而避免手机内存紧张时,服务进程被杀掉。

startForeground(int,Notification)//设置为前台服务

stopForeground(true);//取消为前台服务

startForeground(int,Notification)//设置为前台服务stopForeground(true);//取消为前台服务

二、start方式启动服务

--通过启动模式启动的Service,如不主动关闭,Service会一直在。

IntentmBindIntent=newIntent(ServiceMethods.this,BindServiceMethods.class);startService(mStartIntent);

三、bind方式启动服务

3.1、绑定模式启动的服务会随着绑定逐渐的消亡而解除Service绑定,如果此时Service没有通过启动模式启动,则此服务将会被销毁。

bindService(mBindIntent, serviceConnection, Context.BIND_AUTO_CREATE);
unbindService(serviceConnection);ServiceConnection serviceConnection = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {LocalService.SimpleBinder sBinder = (LocalService.SimpleBinder)service;}};
LocalService的onBind中返回SimpleBinder的示例,以实现绑定组件时服务的交互;

四、调用系统服务

--常用系统服务:StorageManager--存储管理;ClipboardService--提供剪切板功能;PackageManagerService--提供软件包的移除及查看;Vibrator--震动;PowerManager--电源管理;RecoverySystem--系统还原;WindowManager--窗口服务;LayoutInflater--布局服务;ActivityManager;AlarmManager--闹钟;NotificationManager--通知栏管理;ConnectivityManager--网络连接服务;AccessibilityManager--无障碍服务;BatteryManager --电池。

4.1、PackageManager

PackageManager pm = this.getPackageManager();//1.查询已经安装的应用程序 applicationInfo.flags标识应用类型和部分状态
List<ApplicationInfo> applicationInfos = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);//2.查询桌面应用Intent intent = new Intent(Intent.ACTION_MAIN, null);intent.addCategory(Intent.CATEGORY_DEFAULT);List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);//3.查询服务
resolveService(Intent intent, int flags)
queryIntentServices(Intent intent, int flags)getPermissionInfo(String name,  int flags)  //根据包名和指定的flags获取指定的授权信息
installPackage(Uri packageURI, IPackageInstallObserver observer, int flags,String installerPackageName);   //安装app
installPackageWithVerification(Uri packageURI,IPackageInstallObserver observer, int flags, String installerPackageName,Uri verificationURI, ManifestDigest manifestDigest,ContainerEncryptionParams encryptionParams);

4.2、PowerManager

PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);//time:系统时间,SystemClock.uptimeMillis()=立即息屏,SystemClock.uptimeMillis()+1000=1秒后息屏
pm.goToSleep(long time);//息屏函数,此操作需要权限:android.Manifest.permission#DEVICE_POWER
pm.wakeUp(long time);
pm.isScreenOn();    //判断屏幕是否是点亮状态
pm.isPowerSaveMode();   //判断手机是否是省电模式

4.3、RecoverySystem

RecoverySystem rs = (RecoverySystem) context.getSystemService(Context.RECOVERY_SERVICE);//需要权限:android.Manifest.permission.REBOOT
re.installPackage(Context context, File packageFile);   //重启设备并安装一个更新包
re.rebootWipeUserData(Context context);     //重启并清除data分区,类似恢复出厂设置

4.4、WindowManager

WindowManager wm = (WindowManager) context.getSystemService(Service.WINDOW_SERVICE);
WindowManager wm = activity.getWindowManager();Display display = wm.getDefaultDisplay();       //获取系统的窗口信息

4.5、LayoutInflater

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Service.LAYOUT_INFLATER_SERVICE);
//下面两种最后也是通过第一种方式获取
LayoutInflater inflater = activity.getLayoutInflater();
LayoutInflater inflater = LayoutInflater.from(context);inflater.inflate(@LayoutRes int resource, ViewGroup root);
inflater.createView(String name, String prefix, AttributeSet attrs);

4.6、ActivityManager

ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);activityManager.isLowRamDevice();
activityManagergetRunningTask(1).get(0).topActivity.getPackageName  //运行信息
activityManager.clearApplicationUserData(); //清除应用程序的数据,返回是否清除成功
activityManager.getAppTasks();  //返回与调用应用程序关联的任务列表
activityManager.getDeviceConfigurationInfo();
activityManager.killBackgroundProcesses(String packageName);    //立即终止包名所有后台进程。//通过包名获得一个应用程序的所有权限,返回所有永久授权的权限(通常在手机设置中调用)
activityManager.getGrantedUriPermissions(String packageName);
activityManager.clearGrantedUriPermissions(String packageName);     //清除一个应用程序永久授权的权限

4.7、AlarmManager

AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);/*type:  AlarmManager.RTC, 硬件闹钟, 不唤醒设备
AlarmManager.RTC_WAKEUP, 硬件闹钟, 唤醒设备
AlarmManager.ELAPSED_REALTIME, 真实时间流逝, 不唤醒设备
AlarmManager.ELAPSED_REALTIME_WAKEUP, 真实时间流逝, 唤醒设备*/
//设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作
alarms.set(int type, long triggerAtMillis, PendingIntent operation);
alarms.setExtra(int type, long triggerAtMillis, PendingIntent operation);//比上面响铃更精准
alarms.setWindow(int type, long triggerAtMillis, long windowLengthMillis, PendingIntent operation);alarms.setRepeating(int type, long triggerAtMillis, PendingIntent operation);   //设置重复闹钟
alarms.cancel(PendingIntent operation);     //取消定时的闹钟
alarms.setTime(long millis);    //设置系统时间
alarms.setTimeZone(long timeZone);  //设置系统的默认时区

4.8、NotificationManager

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);notificationManager.notify(int id, Notification notification);  //发送一个通知
notificationManager.cancel(int id);
notificationManager.cancelAll();    //取消之前显示的所有通知//创建一个消息通道,,这个方式还可以恢复删除的通道,
//以及更新现有通道的名称、描述、重要性。当然,其也可以一次性创建多个通道
notificationManager.createNotificationChannel(NotificationChannel channel);
notificationManager.createNotificationChannels(List<NotificationChannel> channels);
notificationManager.getNotificationChannel(String channelId);//通过id获得一个通道
notificationManager.deleteNotificationChannel(String channelId);//通过id删除一个通道
notificationManager.getNotificationChannels();//删除所有通道//创建一个消息通道的组容器,比如你的应用程序有多个账户,每个账户都有类似的通道,
//你就可以为这些账户创建一个具有该账户特定标签的组,而不是将帐户信息附加到每个通道的标签。
notificationManager.createNotificationChannelGroup(NotificationChannelGroup group);
//一次性创建多个消息通道组
notificationManager.createNotificationChannelGroups(List<NotificationChannelGroup> groups);
notificationManager.deleteNotificationChannelGroup(String groupId);//通过id删除一个通道组
notificationManager.getNotificationChannelGroups();//通过id删除一个通道组

4.9、AccessibilityManager

AccessibilityManager accessibilityManager = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);accessibilityManager.isTouchExplorationEnabled();   //启用了系统中的触摸检测
accessibilityManager.isEnabled();   //判断系统是否是可辅助的
accessibilityManager.sendAccessibilityEvent(AccessibilityEvent event);  //发送一个辅助事件
accessibilityManager.interrupt();   //中断所有的辅助事件
accessibilityManager.getEnabledAccessibilityServiceList(int feedbackTypeFlags); //通过反馈的类型来得到//添加一个辅助状态改变的监听器
accessibilityManager.addAccessibilityStateChangeListener(listener);
accessibilityManager.removeAccessibilityStateChangeListener(listener);//移除//添加一个触摸检测状态转换的监听器
accessibilityManager.addTouchExplorationStateChangeListener(listener);
accessibilityManager.removeTouchExplorationStateChangeListener(listener);//移除//通知AccessibilityStateChangeListener进行改变
accessibilityManager.notifyAccessibilityStateChanged();
//通知TouchExplorationStateChangeListener进行改变
accessibilityManager.notifyTouchExplorationStateChanged();
//通知HighTextContrastChangeListener进行改变
accessibilityManager.notifyHighTextContrastStateChanged();

4.10、CaptioningManager--字幕管理器

CaptioningManager captioningManager = (CaptioningManager) context.getSystemService(Context.CAPTIONING_SERVICE);captioningManager.sEnabled();//返回用户是否启用首选字幕
captioningManager.getLocale();//返回用户首选字幕语言的语言环境,如果未指定,则为null
captioningManager.getUserStyle();//返回用户首选字幕的可视属性样式,如果未指定,则为默认样式
captioningManager.getFontScale();   //返回字体缩放系数,如果未指定,则为1

4.11、Vibrator--震动

Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(new long[]{100,250,100,250},1);//开始震动
vibrator.cancel();  //取消震动

4.12、ConnectivityManager

ConnectivityManager connManager = (ConnectivityManager)mContext.getSystemService(Context.CONNCTIVITY_SERVICE)
NetworkInfo mNetworkInfor = connManager.getActiveNetworkInfo();
mNetworkInfo.isAvailable(); //网络是否可用
mNetworkInfo.isConnected(); //网络是否可以进行数据传递,此方法更准确
mNetworkInfo.getType()  //获取网络类型,WiFi、移动网

4.13、StorageManager

StorageManager storageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);List<StorageVolume> volumeList = storageManager.getStorageVolumes();    //获取各项挂载信息//可通过广播监听挂载Intent.ACTION_MEDIA_MOUNTEDIntent.ACTION_MEDIA_UNMOUNTEDpublic static boolean isStorageMounted(String path) {IMountService mountService = IMountService.Stub.asInterface(ServiceManager.getService("mount"));try {String state = mountService.getVolumeState(path);if (state != null && state.equals(Environment.MEDIA_MOUNTED)) return true;} catch (RemoteException e) {e.printStackTrace();}return false;}

4.14、WifiManager

WifiManager wifiMgr = (WifiManager)Context.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> scanResults = wifiMgr.getScanResults();//扫描到的周围热点信息
WifiInfo info = wifiMgr.getConnectionInfo();//已连接wifi信息
wifiMgr.setWifiEnabled(boolean) //打开或关闭WIFI
manager.disconnect();   //断开连接
manager.setWifiApEnabled(config, enable)   //开启热点

4.15、AudioManager

AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
adjustVolume(int direction, int flags) //调节一个单位音量
adjustStreamVolume(int streamType, int direction, int flags)
setStreamVolume(int streamType, int index, intflags) //直接设置音量
getMode() //返回当前的音频模式
setMode() //设置声音模式
getRingerMode() //返回当前的铃声模式
//RINGER_MODE_NORMAL(普通)RINGER_MODE_SILENT(静音)RINGER_MODE_VIBRATE(震动)
setRingerMode(int type)
getStreamVolume(int streamType) //获取音量
getStreamMaxVolume(int streamType)
setStreamMute(int streamType,boolean state) //设置静音
setSpeakerphoneOn(boolean on) //设置是否打开扩音器
setMicrophoneMute(boolean on) //设置是否让麦克风静音
isMicrophoneMute() //判断麦克风是否静音或是否打开
isMusicActive() //判断是否有音乐处于活跃状态
isWiredHeadsetOn() //判断是否插入了耳机。
abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl) //放弃音频的焦点。
getParameters(String keys) //给音频硬件设置一个varaible数量的参数值。
getVibrateSetting(int vibrateType) //返回是否该用户的振动设置为振动类型。
isBluetoothA2dpOn() //检查是否A2DP蓝牙耳机音频路由是打开或关闭。
isBluetoothScoAvailableOffCall() //显示当前平台是否支持使用SCO的关闭调用用例。
isBluetoothScoOn() //检查通信是否使用蓝牙SCO。
setBluetoothScoOn(boolean on) //要求使用蓝牙SCO耳机进行通讯。
startBluetoothSco/stopBluetoothSco() //启动/停止蓝牙SCO音频连接。
loadSoundEffects() //加载声音效果。
unloadSoundEffects() //卸载音效。
playSoundEffect((int effectType, float volume) //播放声音效果。//调整最相关的流的音量,或者给定的回退流。
adjustSuggestedStreamVolume(int,int suggestedStreamType intflags) //注册一个组件MEDIA_BUTTON意图的唯一接收机。
egisterMediaButtonEventReceiver(ComponentName eventReceiver)  //请求音频的焦点。
requestAudioFocus(AudioManager.OnAudioFocusChangeListener l,int streamType,int durationHint) 

4.16、SensorManager

sensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
List<Sensor> allSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);

4.17、ClipboardService

ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);//复制文本
ClipData clip = ClipData.newPlainText("simple text","Hello, World!"); //把文本封装到ClipData中
clipboard.setPrimaryClip(clip);//复制intent
ClipData clip = ClipData.newIntent("Intent",appIntent);
clipboard.setPrimaryClip(clip);//复制url
//联系人的URI
private static final String CONTACTS = "content://com.example.contacts";
private static final String COPY_PATH = "/copy";
Uri copyUri = Uri.parse(CONTACTS + COPY_PATH + "/" + lastName);
ClipData clip = ClipData.newUri(getContentResolver(),"URI",copyUri);
clipboard.setPrimaryClip(clip);//粘贴
ClipData clip = clipboard.getPrimaryClip();
if (clip != null) {ClipData.Item item = clip.getItemAt(0);Uri pasteUri = item.getUri();String pasteData = item.getText();Intent pasteIntent = item.getIntent();
}

4.18、BatteryManager

    //1.监听Intent.ACTION_BATTERY_CHANGE广播int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,0);boolean present= intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT,false);int curlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);int maxLevel = intent.getIntExtra(BatteryManager.EXTRA_SCALE,0);String technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH,0);int temperature= intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0);int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,0);int smallIcon = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,0);int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,0);//2.BatteryManager主动获取BatteryManager manager = (BatteryManager) getSystemService(BATTERY_SERVICE);manager.getIntProperty(int id)  //获取各项信息 状态、容量、健康信息manager.isCharging();

Android组件之Service 与常用系统服务用法详解相关推荐

  1. mysql常见关键字的用法_MySQL 常用关键字用法详解

    MySQL 常用关键字用法详解 在开发工程中,操作数据库的时候经常会有不同类型的条件查询,除了使用where外,Mysql本身也提供了很多常用的关键字.本文主要介绍一些常用的关键字,像update.i ...

  2. Delphi常用关键字用法详解

    本文详细介绍了Delphi中常用的各个关键字名称及用法,供大家在编程过程中借鉴参考之用.详情如下: absolute: [delphi] view plaincopy //它使得你能够创建一个新变量, ...

  3. android默认exported_Android android:exported = true 用法详解

    Android android:exported = true 用法详解 Android相关属性的介绍:android:exported = true 在Activity中该属性用来标示:当前Acti ...

  4. fileinput 时间_JavaScript_Bootstrap Fileinput文件上传组件用法详解,最近时间空余,总结了一些关...

    最近时间空余,总结了一些关于bootstrap fileinput组件的一些常见用法,特此分享到phpstudy平台,供大家参考,同时也方便以后的查找.本文写的不好还请见谅. 一.效果展示 1.原始的 ...

  5. android搜索功能xml,Android_Android ActionBar搜索功能用法详解,本文实例讲述了Android ActionBar - phpStudy...

    Android ActionBar搜索功能用法详解 本文实例讲述了Android ActionBar搜索功能用法.分享给大家供大家参考,具体如下: 使用ActionBar SearchView时的注意 ...

  6. php android 复制粘贴板,Android_Android剪贴板用法详解,本文实例详述了Android剪贴板的 - phpStudy...

    Android剪贴板用法详解 本文实例详述了Android剪贴板的用法,分享给大家供大家参考.具体方法分析如下: 这里首先需要注意的一点,就是在使用Android剪贴板的时候大家只记住一点就行了,不管 ...

  7. android butterknife 自定义view,ButterKnife用法详解.md

    # ButterKnife用法详解 ### 如何成为T型人才,垂直在一个行业中,必须要有一整套[知识体系](https://github.com/WeiSmart/Android-Advanced-C ...

  8. android tablayout 自定义,TabLayout用法详解及自定义样式

    TabLayout的默认样式: app:theme="@style/Widget.Design.TabLayout" 从系统定义的该样式继续深入: fill fixed 264dp ...

  9. c语言 append,对C++ string append方法的常用用法详解

    C++ string append()添加文本 使用append()添加文本常用方法: 直接添加另一个完整的字符串: 如str1.append(str2); 添加另一个字符串的某一段子串: 如str1 ...

最新文章

  1. C语言 fread()与fwrite()函数说明与示例
  2. java cglib jar包_Java面试题|反射必看的4道面试题
  3. 每日一皮:妹子们写的代码,Bug为什么这么多?
  4. codeforces 877F F. Ann and Books hash+莫队算法
  5. 网易被曝暴力裁患绝症员工,回应:存在不近人情的地方,向前同事道歉
  6. ZYNQ FPGA程序固化流程
  7. 和利时dcs系统服务器设置,和利时DCS系统常见问题分析
  8. 微信小程序-weUI组件库
  9. matlab图像处理(图像)
  10. stats | 概率分布与随机数生成(二)——均匀分布、指数分布、正态分布、对数正态分布、卡方分布、t分布、F分布和增长分布
  11. 云计算在互联网发展史中的坐标
  12. java可以进行爬虫吗,java可以写爬虫吗
  13. ViewPager2
  14. css中“zoom:1”是什么意思
  15. 【点宽专栏】破解波动性突破实盘系统
  16. 团体程序设计天梯赛-练习集 1-2 打台球(5 分)
  17. Ideas for Snap to grid
  18. 网易有道Redis云原生实战
  19. 小程序生成二维码 发布版本无法显示 测试和体验版正常
  20. 超级网搜 - SuperSearch - 2.1.2.4 版放出

热门文章

  1. HTML5期末大作业:游戏网页设计——穿越火线6页(代码质量好) 学生DW网页设计作业源码 web课程设计网页规划与设计
  2. 计算机php开发技术,基于PHP技术的计算机基础考试系统的开发
  3. 智能拼图游戏 问题 求解
  4. DB2与Sybase/Oracle/Informix的比较
  5. AS400遇到的一些问题和解决办法
  6. 布隆过滤器原理及实践
  7. 计算机管理文件和文件夹的实验结果及分析,大学计算机实验报告1
  8. 基于Android公交查询系统的设计与实现(论文+程序设计源码+数据库文件)
  9. PCA(主成分分析)、超弦/M理论、意识
  10. pscad 与 matlab 接口,PSCAD与MATLAB的接口问题