现在的位置: 首页 > 综合 > 正文

初步理解Android服务、为什么需要服务

2017年03月28日 ⁄ 综合 ⁄ 共 1968字 ⁄ 字号 评论关闭

服务: 长期后台运行的没有界面的组件
android应用:什么地方需要用到服务?

天气预报:后台的连接服务器的逻辑,每隔一段时间 获取最新的天气信息
股票显示:后台的连接服务器的逻辑,每隔一段时间 获取最新的股票信息
mp3播放器: 后台长期的播放音乐。

new Thread(){}.start(); 子线程没有界面,也是长期后台运行的。

android系统进程管理是按照一定的规则的:
1.应用程序一旦被打开 通常情况下关闭(清空任务栈)后进程不会停止。方便下一次快速启动。
带来内存不足的问题。
2.Android系统有一套 内存清理机制。 按照优先级去回收系统的内存。

进程分为5个等级的优先级:(从高到低)

1.Foreground process 前台进程  用户正在玩的应用程序对应的进程

2.Visible process 可视进程 用户仍然可以看到这个进程的界面。

3.Service process服务进程  应用程序有一个服务组件在后台运行。

4.Background process 后台进程  应用程序没有服务在运行 并且最小化 (activity onstop)

5.Empty process 空进程 没有任何运行的activity, 任务栈空了

长期后台运行的组件, 不要在activity开启子线程。
应该是创建服务,在服务里面开启子线程。

服务的目的:
1.长期后台运行。

2.提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,把进程重新创建。

下面看看服务怎么创建:

你会发现: Activity extends ContextThemeWrapper

                    Service extends ContextWrapper

Activity和Service都继承了同一个类,这样至少说明servicehe和Activity一样,都有生命周期。

Activity生命周期:oncreate  ondestory  onstart  onstop  onresume  onpause

对于Service,oncreate和onDestroy【因为Service是在后台运行的组件,是没有界面可言的】

创建一个Activity,实现一个单击事件,打开Service

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	public void click(View view) {
		Intent intent=new Intent(this,MyService.class);   //创建一个意图
		<strong>startService(intent);                     //这个地方需要startService(开启服务)</strong>
	}
}

那么我们也需要有相关的服务绑定,触发的事件:

public class MyService extends Service{
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
	//oncreate  ondestory   
	//服务没有界面
	@Override
	public void <strong>onCreate()</strong> {
		System.out.println("服务创建了");                      <strong>//程序每次运行的时候开启,每次关闭程序下次再次开启的时候触发</strong>
		super.onCreate();
	}
	@Override
	public int <strong>onStartCommand</strong>(Intent intent, int flags, int startId) {   <strong>//第一次运行程序的时候,开启触发一次。</strong>
		System.out.println("服务器收到了开启命令");
		return super.onStartCommand(intent, flags, startId);
	}
	
	@Override
	public void <strong>onDestroy()</strong> {                                          <strong>  //取消服务的时候触发一次</strong>
		System.out.println("服务销毁了");
		super.onDestroy();
	}
}

四大组件都需要在配置文件中配置的:

 <service android:name="com.itheima.testservice.MyService">
</service>


运行程序的时候:程序运行后可以看到服务里面有了该服务。

抱歉!评论已关闭.