当前位置:首页 » 安卓系统 » androidservice参数

androidservice参数

发布时间: 2022-09-19 19:52:26

‘壹’ Android中怎么启动关闭Service及功能解释

1、 Service不是分离开的进程,除非其他特殊情况,它不会运行在自己的进程,而是作为启动运行它的进程的一部分。
2、 Service不是线程,这意味着它将在主线程里劳作。
启动service有两种方法:
1、 Context.startService()
调用者与服务之间没有关联,即使调用者退出,服务仍可运行
2、 Context.bindService()
调用者与服务绑定在一起,调用者一旦退出,服务也就终止
Service的生命周期
如果使用startService()启动service,系统将通过传入的Intent在底层搜索相关符合Intent里面信息的service。如果 服务没有启动则先运行onCreate,然后运行onStartCommand (可在里面处理启动时传过来的Intent和其他参数),直到明显调用stopService或者stopSelf才将停止Service。无论运行 startService多少次,只要调用一次stopService或者stopSelf,Service都会停止。使用stopSelf(int)方 法可以保证在处理好intent后再停止。
控制service运行的主要方式有两种,主要是根据onStartCommand方法返回的数值。方法:
1、START_STICKY
2、START_NOT_STICKY or START_REDELIVER_INTENT
这里主要解释这三个变量的意义:
1、 START_STICKY
在运行onStartCommand后service进程被kill后,那将保留在开始状态,但是不保留那些传入的intent。不久后service就 会再次尝试重新创建,因为保留在开始状态,在创建 service后将保证调用onstartCommand。如果没有传递任何开始命令给service,那将获取到null的intent
2、 START_NOT_STICKY
在运行onStartCommand后service进程被kill后,并且没有新的intent传递给它。Service将移出开始状态,并且直到新的 明显的方法(startService)调用才重新创建。因为如果没有传递任何未决定的intent那么service是不会启动,也就是期间 onstartCommand不会接收到任何null的intent。
3、 START_REDELIVER_INTENT
在运行onStartCommand后service进程被kill后,系统将会再次启动service,并传入最后一个intent给 onstartCommand。直到调用stopSelf(int)才停止传递intent。如果在被kill后还有未处理好的intent,那被 kill后服务还是会自动启动。因此onstartCommand不会接收到任何null的intent。
客户端也可以使用bindService来保持跟service持久关联。谨记:如果使用这种方法,那么将不会调用onstartCommand(跟 startService不一样,下面例子注释也有解析,大家可试试)。客户端将会在onBind回调中接收到IBinder接口返回的对象。通常 IBinder作为一个复杂的接口通常是返回aidl数据。
Service也可以混合start和bind一起使用。
权限
要运行service,首先必须在AndroidManifest.xml里申明<service>标签。
Service能够保护个人的IPC调用,所以在执行实现该调用时前先使用checkCallingPermission(String) 方法检查是否有这个权限。

‘贰’ Android service传递问题

我只学过java,没学过C;在我的理解范围内,java并没有指针概念。你所说的
class B(Service service) {
mBservice = service;
}
传过去的是一个对象,当service没有被启动的时候,传过去的就是null。当service启动的时候,传过去的是service的一个对象的引用。
也许你真的不该用c的那一套,理解java。java属于面向对象语言,不存在指针。

‘叁’ android在service中怎么实现

在Activity中可以通过再次startService,来给Service发送消息,而service里的onStartCommand方法也有一个参数,是个int类型的,第一次给service发消息时为1,第二次为2,不断累加。onStartCommand方法还有一个intent类型的参数,你可以将相应的标志位保存在intent中,这些标志位可以用来控制播放,停止,暂停等。

‘肆’ Android如何启用Service,如何停用Service。

1.第一种是通过调用Context.startService()启动,调用Context.stopService()结束,startService()可以传递参数给Service
2.第二种方式是通过调用Context.bindService()启动,调用Context.unbindservice()结束,还可以通过ServiceConnection访问Service。
在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。

‘伍’ android里 activity怎么向service传递参数

android中activity中向service传递参数,有如下方法:

1.在Activity里注册一个BroadcastReceiver,Service完成某个任务就可以发一个广播,接收器收到广播后通知activity做相应的操作。
2.使用bindService来关联Service和Application,应用.apk里的所有组件一般情况都运行在同一个进程中,所以不需要用到IPC,bindService成功后,Service的Client可以得到Service返回的一个iBinder引用,具体的参见Service的文档及onBind的例子,这样Service的引用就可以通过返回的iBinder对象得到,如
public class LocalService extends Service {
// This is the object that receives interactions from clients. See
// RemoteService for a more complete example.
private final IBinder mBinder = new LocalBinder();

public class LocalBinder extends Binder {
LocalService getService() {
return LocalService.this;
}
}

@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}

之后Client通过这个iBinder对象得到Service对象引用之后,可以直接和Service通讯,比如读取Service中的值或是调用Service的方法。

‘陆’ android启动一个service,然后用service检测系统使用intent启动activity。每次启动传递不同的图片参数。

startActivity(MyIntent);这个只是显示activity,而activity实际已经存在,所以他只显示出来,不刷新。这个是你对activity的生命周期了解还不够的原因。

解决办法是在你的activity里onresume()里重写 refresh()函数就好。这样就实现了。onresume就再次创建.
private void refresh() {
/*finish();
Intent intent = new Intent(RefreshActivityTest.this, RefreshActivityTest.class);
startActivity(intent);*/

onCreate(null);
}

‘柒’ 安卓中,怎么将service中定义的参数拿到activity中去调用,然后再将该参数值返回回去

通过service中的onBind方法,这个方法的参数是Intent,通过Intent就能获得传入的值。范例代码如下:
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.e("onBind", "onBind");
//看这 String url=intent.getStringExtra("url");
return new MyBinder();
}

‘捌’ Android中怎么启动关闭Service及功能解释

启动:
//首先注册服务
<service
android:name="com.wangdeyu.service.MusicService"
android:exported="false" >
<intent-filter>
<action android:name="com.abc" />
</intent-filter>
</service>

//启动服务
Intent service=new Intent(" com.abc");
startService(service);
//Service生命周期
①onCreate() 创建Service
②onStart(Intent intent, int startId) 启动Service
③onDestroy() 销毁Service
//关闭服务
stopService(service);

Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy
我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。
1 通过startService,就是上面这种
Service会经历 onCreate --> onStart
stopService的时候直接onDestroy
如果是 调用者 直接退出而没有调用stopService的话,Service会一直在后台运行。
下次调用者再起来仍然可以stopService。
2 通过bindService
Service只会运行onCreate, 这个时候 调用者和Service绑定在一起
调用者退出了,Srevice就会调用onUnbind-->onDestroyed
所谓绑定在一起就共存亡了。
注意:Service的onCreate的方法只会被调用一次,
就是你无论多少次的startService又 bindService,Service只被创建一次。
如果先是bind了,那么start的时候就直接运行Service的onStart方法,
如果先是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,
只能先UnbindService, 再StopService,所以是先start还是先bind行为是有区别的。
Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。
服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。
这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,
即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,
接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,
但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,
接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,
接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,
多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。
如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法.

‘玖’ android service 中怎样接受activity传递过来的参数

可以参考如下内容:

service类必须实现一个接收方法,接收中传递的是intent
@Override
public IBinder onBind(Intent intent) {
Bundle bundle = intent.getExtras();
String stringVal = bundle.getString("stringValue"); //用于接收字符串
int numVal = bundle.getInt("intValue"); //用于接收int类型数据
byte[] bytes = bundle.getByteArray("bytesValue"); //用于接收字节流,你可以把文件放入字节流
return null;
}

你可以用Bundle来接受你从Activity发过来的数据,然后使用Bundle提供各个方法来接受数据。
如果仅仅是字符串之类的,
使用getStringExtra方法直接接收即可。
@Override
public IBinder onBind(Intent intent) {
String str1 = intent.getStringExtra("str1");
String str2 = intent.getStringExtra("str2");
return null;
}

热点内容
数据库数据的一致性 发布:2025-01-11 17:30:45 浏览:707
手机怎么设置手势安卓 发布:2025-01-11 17:15:54 浏览:964
威能壁挂炉解压阀 发布:2025-01-11 17:15:53 浏览:559
突破服务器ip限制 发布:2025-01-11 17:11:23 浏览:818
支付宝上传凭证 发布:2025-01-11 17:10:29 浏览:876
怎么打开行李箱的密码锁 发布:2025-01-11 17:09:51 浏览:593
苹果怎么删除id账号和密码 发布:2025-01-11 17:09:50 浏览:784
7z解压很慢 发布:2025-01-11 16:51:23 浏览:942
电脑改文档服务器 发布:2025-01-11 16:41:14 浏览:870
编译汇编语言实例 发布:2025-01-11 16:36:55 浏览:671