service 知识要点讲解

来源:互联网 发布:广告页设计软件 编辑:程序博客网 时间:2024/05/11 02:59
将字符串解析成Long值
try {
if (!TextUtils.isEmpty(periodStr))
period = Long.parseLong(periodStr) * 60 * 1000;
} catch (Exception e) {
Log.i(TAG, "Long.parseLong(periodStr) :" + e.toString());
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent == null) {
Log.i(TAG, "onStartCommand -- no intent , no restart.");
stopSelf();
return START_NOT_STICKY;
}
Log.i(TAG, "onStartCommand -- has intent");
return super.onStartCommand(intent, flags, startId);
}


与onStart区别?


1. <service android:enabled="true" android:name=".MyService" /> 
其中android:enabled属性的值为true,表示MyService服务处于激活状态。虽然目前MyService是激活的,但系统仍然不会启动MyService,要想启动这个服务。必须显式地调用startService方法。
以上方法启动服务,并且未调用stopService来停止服务,这个服务就会随着Android系统的启动而启动,随着Android系统的关闭而关闭。也就是服务会在Android系统启动后一直在后台运行,直到Android系统关闭后服务才停止。  我想问的是下次启动时没有调用startService呢?


在 service 中使用Binder 这样的作用是将 调用bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE); 的activity与该service 绑定
 public class MyBinder extends Binder  
52.    {  
53.        MyService getService()  
54.        {  
55.            return MyService.this;  
56.        }  
57.    }  


在 onServiceConnected中就可以这样: myService = ((MyService.MyBinder) service).getService();  获得service。
onServiceConnected方法中的第2个参数是一个IBinder类型的变量,将该参数转换成MyService.MyBinder对象,并使用MyBinder类中的getService方法获得MyService对象。在获得MyService对象后,就可以在Activity中随意操作MyService了。并且,MyService在activity退出时会调用onUnbind 。解除绑定,activity销毁时,service被销毁。。。


如果先启动(调用startService方法)一个服务,然后再绑定(调用bindService方法)服务,会怎么样呢?在这种情况下,虽然服务仍然会成功绑定到Activity上,但在Activity关闭后,服务虽然会被解除绑定,但并不会被销毁,也就是说,MyService类的onDestroy方法不会被调用。




    //  要想在Service中启动Activity,必须设置如下标志  
17.        activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
使用AIDL关键代码: onBind方法必须返回MyServiceImpl类的对象实例,否则客户端无法获得服务对象
8. public class MyService extends Service  
9. {   
10.    public class MyServiceImpl extends IMyService.Stub  
11.    {  
12.        @Override  
13.        public String getValue() throws RemoteException  
14.        {  
15.            return "Android/OPhone开发讲义";  
16.        }  
17.    }  
18.    @Override  
19.    public IBinder onBind(Intent intent)  
20.    {          
21.        return new MyServiceImpl(); 
22.    }  
23.




  <service
            android:name=".download.NewDownloadService"
            android:process=":ottdownservice" >
        </service> 


process 的作用?




   什么是IntentService?有何优点? 
IntentService也是一个Service,是Service的子类, 
IntentService和Service有所不同,通过Looper和 Thread来解决标准Service中处理逻辑
的阻塞问题




AILD使用规则:


如果方法的类型是非简单类型,例如,String、List或自定义的类,需要使用in、out或inout修饰。其中in表示这个值被客户端设置;out表示这个值被服务端设置;inout表示这个值既被客户端设置,又被服务端设置。
0 0
原创粉丝点击