android 服务和进程

进程

  1. Foreground process 前台进程
    • 拥有一个正在与用户交互的Activity(onResume方法被调用)的进程
    • 拥有一个与正在与用户交互的Activity绑定的服务进程
    • 拥有一个正在"运行于前台"的服务(服务的startforground方法被调用)
    • 拥有一个正在执行以下三个周期方法任意一个方法的服务(onCreate onStart onDestroy)
    • 拥有一个正在执行onReceive方法的广播接收者进程
  2. Visible process 可见进程
    • 拥有一个可见但是没有获得焦点的Acitivity(onPause方法被调用)的进程
    • 拥有一个与可见activity绑定的服务的进程
  3. service process 拥有一个通过startService方法启动的服务
  4. background process 后台进程 拥有一个不可见的activity(onStop方法被调用)的进程
  5. empty process 空进程 没有拥有任何活动的应用组件的进程

服务 service

运行于后台的一个组件,用来运行合适运行在后台的代码,服务是没有前台界面,可以视为没有界面的Activity。

  • 开启服务和关闭服务
    1.继承 Service
    2.通过intent进行显示开启
public class MainActivity extends AppCompatActivity {

    Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //显示启动服务
        intent = new Intent(this, MyService.class);
    }

    /**
     * 开启服务
     *
     * @param v
     */
    public void click(View v) {
        startService(intent);
    }


    /**
     * 关闭服务
     *
     * @param v
     */
    public void click2(View v) {
        stopService(intent);
    }
}

public class MyService extends Service {
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}
  • 服务的生命周期
    1.首先会调用oncrate方法, 服务开启后,只会调用一次onCreate
    2.接着会掉onStartCommand, 服务开启后,再次或多次开启,会执行onStartCommand
    3.关闭服务的时候会调用onDestroy
public class MyService extends Service {
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        System.out.println();
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        System.out.println("onStartCommand 方法");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        System.out.println("onDestroy 方法");
        super.onDestroy();
    }

    @Override
    public void onCreate() {
        System.out.println("onCreate 方法");
        super.onCreate();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容