㈠ android中如何将客户端连到指定的服务器
额··能说的明白点么··是指向指定的服务器发送消息么?是的话就直接将服务器地址绑定在手机上不就可以了么···还是你要问通过什么方法连接服务器,方法的话··我知道的有socket 和HTTP 这样就能够跟指定的服务器通信了··
㈡ android 客户端怎样使用aidl对接服务端
使用统一的AIDL接口,必须保证包名,接口名,接口定义都一致,最好采用直接复制。
客户端:利用Context,intent实现对Serivce的绑定和调用。
其中service中的android:name为接口的实现类所在位置。intent-filter为AIDL接口文件所在位置。在客户端发起bind时,发送的Intent应该与intent-filter中android:name指定一致。否则会出现无法找到该接口。
IntentUIntent=newIntent("com.ipanel.upgrade.UpgradeSystem");
bindService(UIntent,Uconn,BIND_AUTO_CREATE);
使用在线服务器编译AIDL可能会出现问题:
【1】NoAndroid.mkinpackages/apps/UpgradeService.
需要在客户端和服务端的工程下添加Andorid.mk文件。
【2】无法找到该AIDL文件的声明。
需要在服务端的Android.mk中添加对AIDL的编译。
LOCAL_SRC_FILES:=$(callall-subdir-java-files)
src/com/ipanel/properties/Properties.aidl
src/com/ipanel/upgrade/UpgradeSystem.aidl
㈢ android怎么使用数据网连接服务器
android客户端不能直接与服务器数据库连接,拿sqlserver来说,安装之后有几个G那么大,android程序是跑在手机上的,想让程序直接访问sqlserver,那手机需要非常大的内存。但是可以通过webservice这样一个桥梁来间接访问SQLServer。
即在服务器运行一个服务端程序,该服务端程序通过接收来自android客户端的指令,对数据库进行操作。客户端与服务端直接的数据传输主要通过http协议发送和接收json数据或者xml数据,服务端接收到客户端的json数据之后,进行json解析,再按一定的逻辑对数据库进行增、删、改、查。客户端的http请求可以通过 HttpClient类实现,在anddroid 4.0之后,客户端的网络请求已经不被允许在主线程中运行,所以题主还需注意另开启一个子线程进行网络请求。
㈣ Android 之 Service(一)启动,绑定服务
Service(服务)一个运行在后台执行长时间运行的操作组件,它不提供任何用户界面,作为与Activity同级的组件,它依旧是运行在主线程中。
其它组件可以启动一个Service,当这个Service启动之后便会在后台执行,这里需要注意,由于是在主线程中,所以我们需要另外开启一个线程来执行我们的耗时操作。
此外,一个组件还可以与一个Service进行绑定来实现组件之间的交互,甚至可以执行IPC(Inter-Process Communication)进程间通信。
Service可以在后台执行很多任务,比如处理网络事务,播放音乐,文件读写或者与一个内容提供者交互,等等。
本地服务(Local)
该服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外本地服务因为是在同一进程因此不需要IPC,也不需要AIDL。相应bindService会方便很多,当主进程被Kill后,服务便会终止。一般使用在音乐播放器播放等不需要常驻的服务。
远程服务(Remote Service)
该服务是独立的进程,对应进程名格式为所在包名加上你指定的android:process字符串。一般定义方式 android:process=":service" 由于是独立的进程,因此在Activity所在进程被Kill的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务具有较高的灵活性。由于是独立的进程,会占用一定资源,并且使用AIDL进行IPC比较麻烦。一般用于系统的Service,这种Service是常驻的。
startService启动的服务
用于启动一个服务执行后台任务,不与组件进行通信,停止服务使用stopService。 当一个应用组件比如activity通过调用startService()来启动一个服务的时候,服务便处于启动状态。一旦启动,服务可以在后台无限期地运行下去,即使当启动它的组件已经销毁。通常情况下,一个启动的service执行一个单一的操作并且不会返回任何结果给调用者。
bindService启动的服务
用于启动的服务需要进行通信。停止服务使用unbindService。 当一个应用组件通过调用bindService()来与一个服务绑定时,服务便处于绑定状态。一个绑定的服务提供了一个客户端-服务器端接口来允许组件与服务进行交互,发送请求,得到结果甚至通过IPC进程间通信来完成操作。只有当其它组件与服务进行绑定时,服务才会处于绑定状态。多个组件可以同时与服务绑定,但是当他们全部都解除绑定时,服务就会销毁。
2.BindService:
如果一个Service在某个Activity中被调用bindService方法启动,不论bindService被调用几次,Service的 onCreate 方法只会执行一次,同时 onStartCommand 方法始终不会调用。当建立连接后,Service会一直运行,除非调用unbindService来接触绑定、断开连接或调用该Service的Context不存在了(如Activity被Finish——即通过bindService启动的Service的生命周期依附于启动它的Context),系统在这时会自动停止该Service。
3.StartService AND BindService:
当一个Service在被启动(startService 的同时又被绑定(bindService ),该Service将会一直在后台运行,并且不管调用几次, onCreate 方法始终只会调用一次, onStartCommand 的调用次数与startService 调用的次数一致(使用bindService 方法不会调用 onStartCommand )。同时,调用unBindService 将不会停止Service,必须调用stopService 或Service自身的stopSelf 来停止服务。
4.停止Service:
当一个服务被终止(stopService 、stopSelf 、unbindService )时, onDestory 方法将会被调用——所以我们需要在该方法中清除一些工作(依附该Service生命周期上的,比如:停止在Service中创建并运行的线程)。
1.创建服务
如果你才用的是 startService的方式那么 onBind方法可以忽略
2.注册服务
3.开启服务
start:
bind
绑定服务,一般涉及到组件或进程之间的通信,既然需要通信,那么我们肯定需要一个连接,这里ServiceConnection就是我们所需要的连接,通过Ibinder的传递,我们可以获取到Service的Ibinder对象,从而进行相关操作。
关于粘性服务,这里需要提到 Service的onStartCommand返回值
andorid:name
adroid:exported
android:enabled
android:label
android:process
android:icon
android:permission
关于服务,当我们在应用开发中,如果需要长时间的在后台运行,独立完成某一些事情的情况下,请使用Service!
此文综合: http://www.jianshu.com/p/1e49e93c3ec8 以及自己的一些问题看法,用作学习,回顾之用。
Service 前台服务
请参看 紫豪 http://www.jianshu.com/p/5505390503fa
㈤ Android客户端怎么与服务器数据库连接
不能与数据库连接的
Android客户端不能直接与服务器数据库连接。数据库是需要非常大的内存,安装之后有好几G,连接数据库要有一个像SQLServer里的webservice,这样的一个桥梁来间接访问。就是在服务器运行一个服务端程序,该服务端程序通过接收来自android客户端的指令,对数据库进行操作。
客户端的http请求可以通过 HttpClient类实现,在anddroid 4.0之后,客户端的网络请求已经不被允许在主线程中运行,所以还需注意另开启一个子线程进行网络请求。
(5)android服务绑定服务器扩展阅读:
Android安全权限机制:
Android默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。
下载一款Android应用通常会要求如下的权限:拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人的信息、读取日程信的息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、
还有对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄图片等。
㈥ Android 服务的限制
Google官网将Android服务分为了三种,前台服务,后台服务和绑定服务:
前台服务执行一些用户能注意到的操作。例如,音频应用会使用前台服务来播放音频曲目。前台服务必须显示 通知 。即使用户停止与应用的交互,前台服务仍会继续运行。
后台服务执行用户不会直接注意到的操作。例如,如果应用使用某个服务来压缩其存储空间,则此服务通常是后台服务。
当应用组件通过调用 bindService() 绑定到服务时,服务即处于 绑定 状态。绑定服务会提供客户端-服务器接口,以便组件与服务进行交互、发送请求、接收结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。仅当与另一个应用组件绑定时,绑定服务才会运行。多个组件可同时绑定到该服务,但全部取消绑定后,该服务即会被销毁。
我个人理解服务可以分为两种, 前台 和 后台 ,而 绑定 应该是被当作一种状态,因为 前台服务 和 后台服务 都可以进行绑定。
基于这个理解,我们将限制分成了前台和后台两个部分:
从 Android 5.0(API 级别 21)开始,如果使用隐式 Intent 调用 bindService() ,则系统会抛出异常。为确保应用的安全性,在启动 Service 时,请始终使用显式 Intent,且不要为服务声明 Intent 过滤器。
在后台中运行的 Service 会消耗设备资源,这可能会降低用户体验。 为了缓解这一问题,系统对这些 Service 施加了一些限制。
处于前台时,应用可以自由创建和运行前台与后台 Service。
Android 8.0 开始:系统不允许后台应用创建后台 Service。否则该函数将引发一个 IllegalStateException。
Android 8.0 开始:进入后台时,在一个持续数分钟的时间窗内,应用仍可以创建和使用 Service。 在该时间窗结束后,应用将被视为处于 空闲 状态。 此时,系统将停止应用的后台 Service,就像应用已经调用 Service 的 Service.stopSelf() 方法一样。
为了解除这种限制,可以使用 JobScheler 作业替换后台 Service。
在 Android 8.0 之前,创建前台 Service 的方式通常是先创建一个后台 Service,然后将该 Service 推到前台。
而在Android 8.0 之后,系统不允许后台应用创建后台 Service。
解决方案:调用 startForegroundService() ,以在前台启动新 Service。
在系统创建 Service 后,应用有五秒的时间来调用该 Service 的 startForeground() 方法以显示新 Service 的用户可见通知。 如果应用在此时间限制内 未 调用 startForeground() ,则系统将停止此 Service 并声明此应用为 ANR 。
前台服务必须显示优先级为 PRIORITY_LOW 或更高的 状态栏通知 ,这有助于确保用户知道应用正在执行的任务。如果某操作不是特别重要,因而您希望使用最低优先级通知,则可能不适合使用服务;相反,您可以考虑使用 计划作业 。
在 Android 9 (API 28)之后,使用前台服务必须申请 FOREGROUND_SERVICE 权限,否则会报 SecurityException 。 这是普通权限,因此,系统会自动为请求权限的应用授予此权限。
每个运行服务的应用都会给系统带来额外负担,从而消耗系统资源。如果应用尝试使用低优先级通知隐藏其服务,则可能会降低用户正在主动交互的应用的性能。因此,如果某个应用尝试运行拥有最低优先级通知的服务,则系统会在抽屉式通知栏的底部调用出该应用的行为。
以 Android 12 为目标平台的应用在后台运行时无法再启动 前台服务 。
在 Android 11 及以后,系统对前台服务何时可以访问设备的位置、摄像头或麦克风进行了限制。
如果您的应用以 Android 11 或更高版本为目标平台,且在前台服务中访问摄像头或麦克风,则必须添加 前台服务类型 camera 和 microphone 。
如果你的应用 在后台运行时启动了某项前台服务 :
如果某服务的功能(位置、麦克风 和 相机)受到了限制,则Logcat中会打印如下语句:
㈦ Android保活系列之——双进程守护
近期跳槽到玩加电竞,加之英雄联盟云顶之弈排位模式的推出,导致个人精力有限没有时间和心情去写相关的博客。
在Context中提供了bindService的方法
绑定服务是客户端--服务器接口中的服务器。组件和服务进行绑定后,可以发送请求、接收响应、执行进程间通信(IPC)。这里的服务器模型不同于网络C-S模型而是针对于Android应用不同的功能进行进程划分,例如提供视频播放的进程我们可以把它当做视频播放服务器,我们UI层属于客户端,客户端想要调用视频播放,需要用IPC方式通过bind服务的方式调用视频播放服务。(PS:如果大家对IPC不太熟悉可以参考我的其他文章 Android跨进程通信技术的使用及原理 )客户端可以通过调用bindService()绑定到服务。调用时,必须提供ServiceConnection的实现,后者会监控与服务的连接及销毁。
借助bindService的机制,我们可以在主进程创建时创建一个守护进程,并监听守护进程的连接及销毁,再守护进程bindService中绑定主进程,这样即使进程因为锁屏、内存等问题杀掉后,也会被守护进程拉起,这就是Android中双进程守护的概念。当然早在PC时期,网吧的计时系统就使用了双进程守护机制,防止被恶意杀掉。
实现方式就不写了,网络上一搜一堆,这里给出一篇文章
Android 双进程守护
写的中规中矩,如果不清楚如何实现可以看一下。
谷歌官方8.0变更
当版本>8.0时,如果需要在后台启动服务需要调用startForegroundService。并且在serivce中onCreate方法必须在5秒内调用startForeground ,向通知栏发一个通知告知用户你的App正在后台运行,否则就会抛出异常
8.0通知适配
保活分两种:拉活、保活
拉活和保活是相辅相成的。在6.0版本以后的机型上,系统杀应用是按照进程组杀的,会直接导致双进程守护失效。那么因此就不使用双进程了么?
1.低版本双进程守护是依然亲测好使。
2.双进程守护可以和后面讲到的 账号同步、外部PUSH、JobScheler
相结合,可以规避开系统杀进程组的问题。使双进程守护功能可以兼容高版本。
讲的有些笼统,我寻思的发Dome、写例子,但这样解决不了根本问题,只有懂得了思路,了解了什么是双进程守护,才能在开发中随机应变。只能说Android水太深,大家需要细心细心再细心。
㈧ Android中如何启用Service,如何停用Service
• Context.startService()
• Context.bindService()
1. 在同一个应用任何地方调用 startService() 方法就能启动 Service 了,然后系统会回调 Service 类的
onCreate() 以及 onStart() 方法。这样启动的 Service 会一直运行在后台,直到
Context.stopService() 或者 selfStop() 方法被调用。另外如果一个 Service 已经被启动,其他代码再试图调用
startService() 方法,是不会执行 onCreate() 的,但会重新执行一次 onStart() 。
2. 另外一种 bindService() 方法的意思是,把这个 Service 和调用 Service
的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后
Service 会回调上边提到的 onBind() 方发,你可以从这里返回一个实现了 IBind
接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service
还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。
总结:
1.
startService()的目的是回调onStart()方法,onCreate()
方法是在Service不存在的时候调用的,如果Service存在(例如之前调用了bindService,那么Service的onCreate方法
已经调用了)那么startService()将跳过onCreate() 方法。
2.
bindService()目的是回调onBind()方法,它的作用是在Service和调用者之间建立一个桥梁,并不负责更多的工作(例如一个
Service需要连接服务器的操作),一般使用bindService来绑定到一个现有的Service(即通过StartService启动的服
务)。
由于Service 的onStart()方法只有在startService()启动Service的情况下才调用,故使用onStart()的时候要注意这点。
㈨ 如何将android服务端部署到服务器上
1、要进行创建AIDL的接口之前,需要进行选中当前的项目的文件中,选中完成项目之后。 2、然后进行点击Android studio菜单中的“file”的选项,就会弹出了一个下拉的菜单中“new”选项。 3、就会弹出了一个下一级的菜单中,进行选择下一级菜单中的“AIDL”的选项。 4、就会弹出了一个菜单中,进行点击这个菜单中的“AIDL FILE”的选项。 5、就会弹出了一个AIDL的窗口的选项,需要给接口进行添加名称,在interface name的输入框中进行输入名称,点击”finish“的选项。 6、然后在项目中进行天机了一个aidl的文件,在该文件下中,有一个aidl的后缀的文件,其实就是一个接口文件。