今天晚上把service的用法整理一下,service在Android中的地位仅次于activity,其重要性可见一斑。下面主要从四个部分分别讲解:
分别是startService,bindservice(两个基础用法。通过log查看生命周期)messenger和aidl(Android IPC机制主要也是通过service与binder来实现的)
编写activityInfo类来管理这四个测试的activity类,方便activity之间的跳转,简化代码
package com.example.servicetest;
public class ActivityInfo
{
private String name;
private Class clazz;
public ActivityInfo(String name, Class clazz)
{
super();
this.name = name;
this.clazz = clazz;
}
public String getName()
{
return name;
}
public Class getClazz()
{
return clazz;
}
public void setName(String name)
{
this.name = name;
}
public void setClazz(Class clazz)
{
this.clazz = clazz;
}
}
测试主类 MainActivity代码:
package com.example.servicetest;
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
public class MainActivity extends Activity
{
private ListView mListView;
private final List<ActivityInfo> mData = Arrays.asList(new ActivityInfo(
"StartService", ActivityStartService.class), new ActivityInfo(
"bindService", ActivityBindService.class), new ActivityInfo(
"Menssenger", ActivityMessenger.class), new ActivityInfo("aidl",
ActivityAidl.class));
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化view,个人的风格而已
initView();
}
private void initView()
{
mListView = (ListView) findViewById(R.id.lv_activity_main);
//为listview设置adapter
mListView.setAdapter(new MyAdapter(this, mData));
mListView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
Intent intent = new Intent();
//通过前面设计的activityInfo得到要跳转的activity的class
intent.setClass(MainActivity.this, mData.get(arg2).getClazz());
startActivity(intent);
}
});
}
}
listView的adapter实现很简单,继承自baseAdapter,使用viewholder去优化listview,想必大家都了解。
(1)通过startService(Intent intent)的方式开启服务
package com.example.servicetest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ActivityStartService extends Activity implements OnClickListener
{
private Button mButtonStart, mButtonStop;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super</