有哪些网站可以做代理做网站推广价格
同样使用intent来传递服务


oncreate是服务第一次启动调用,onStartCommand是服务每次启动的时候调用,也就是说服务只要启动后就不会调用oncreate方法了。可以在myservice中的任何位置调用stopself方法让服务停止下来。
服务生命周期

前台服务类似于通知会有个图标在状态栏,为了防止被杀或回收,使用和通知一样的方式,变成前台服务

标准服务写法:

但有更加简洁的写法,不需要关注线程和服务停止,onHnadleIntent本身就在线程中,而且执行完成后会自动销毁。


补充:
1、前台进程:可以理解为是最顶部的,直接跟用户交互的。比如说我们操作的Activity界面.
 2、可见进程:可以见的,但是不操作的,比如说我们在一个Activity的顶部弹出一个Dialog,这个Dialog就是前台进程,但是这个Activity则是可见进程。(操作的只是Dialog,而不是Activity但可见)
 3、服务进程:服务可以理解为是忙碌的后台进程,虽然是在后台,但是它很忙碌。
 4、后台进程:后台进程就是退隐到后台,不做事的进程。(比如按home键程序在后台但没有被干掉/)
 5、空进程:空进程是不做事的,没有任何东西在上面跑着,仅作缓存作用。(比如按返回键退出此时就是空进程,销毁掉的进程就是空进程)
 假设,内存不够用了,会先杀谁呢?
 首先杀的是空进程,要是还不够就杀后台进程,要是还不够,那么就杀服务,但是服务被杀死以后,等内存够用了,服务又会跑起来了。
 ————————————————
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                         
 原文链接:https://blog.csdn.net/ChenYiRan123456/article/details/123840817
绑定服务:

-  
Binder是IBinder的空实现类
 -  

 
OnBind是需要实现的,这里返回的是DownloadBinder中的实例。

红色框是向下转换,这样得到了downloadBinder的对对象,就可以去使用他们的方法了。

bindservice、startactivity等都是context的方式,直接用
看下如下的代码注释:
 
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.ServiceConnection;
 import android.os.IBinder;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
  
 public class MainActivity extends AppCompatActivity {
     private static final String TAG = "MainActivity-vv";
     private MyService.MyBinder mb;
     private ServiceConnection conn = new ServiceConnection() {
  
  
         //当客户端正常连接着服务时,执行服务的绑定操作会被调用
         //此时传来的IBinder对象是onbinder的返回的对象
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
             Log.d(TAG, "onServiceConnected: ");
             //将IBinder对象转成MyBinder
             mb = (MyService.MyBinder) service;
             //调用MyBinder中的获取进度的方法:实现监控
             int process = mb.getProcess();
             Log.d(TAG, "当前进度是: " + process);
         }
  
         //当客户端和服务的连接丢失了
         @Override
         public void onServiceDisconnected(ComponentName name) {
             Log.d(TAG, "onServiceDisconnected: ");
  
         }
     };
  
     //IBinder
     //ServicerConnection:用于绑定客户端和Service
     //进度监控
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
     }
  
     /**
      * 按钮点击事件
      *
      * @param v
      */
     public void operate(View v) {
         switch (v.getId()) {
             case R.id.start:
                 //启动服务:创建-->启动-->销毁
                 //如果服务已经创建了,后续重复启动,操作的都是同一个服务,不会再重新创建了,除非你先销毁它
                 Intent it1 = new Intent(this, MyService.class);
                 startService(it1);
                 break;
             case R.id.stop:
                 Intent it2 = new Intent(this, MyService.class);
                 stopService(it2);
                 break;
             case R.id.bind:
                 //绑定服务:最大的 作用是用来实现对Service执行的任务进行进度监控
                 //如果服务不存在: onCreate-->onBind-->onUnbind-->onDestory
                 // (此时服务没有再后台运行,并且它会随着Activity的摧毁而解绑并销毁)
                 //服务已经存在:那么bindService方法只能使onBind方法被调用,而unbindService方法只能使onUnbind被调用
                 Intent it3 = new Intent(this, MyService.class);
                 bindService(it3, conn, BIND_AUTO_CREATE);
  
                 break;
             case R.id.unbind:
                 //解绑服务
                 if (MyService.IsBinder)
                     unbindService(conn);
                 break;
         }
     }
 }
