1.android的service是和activity同线程吗2.public class ActivityMain extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);Log.i("testThread", "activity onCreate() : "+Thread.currentThread().getId());this.startService(new Intent("com.king.MyService"));
}
}public class MyService extends Service {@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
Log.i("testThread", "onBind() : "+Thread.currentThread().getId());
return null;
}@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.i("testThread", "service onCreate() : "+Thread.currentThread().getId());
}@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.i("testThread", "onStart() : "+Thread.currentThread().getId());
}}为什么logcat打印
03-17 03:22:04.397: INFO/testThread(228): activity onCreate() : 1
03-17 03:22:04.697: INFO/testThread(228): service onCreate() : 1
03-17 03:22:04.758: INFO/testThread(228): onStart() : 1
,显示activity和service 是相同的线程id ?
迷惑
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);Log.i("testThread", "activity onCreate() : "+Thread.currentThread().getId());this.startService(new Intent("com.king.MyService"));
}
}public class MyService extends Service {@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
Log.i("testThread", "onBind() : "+Thread.currentThread().getId());
return null;
}@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.i("testThread", "service onCreate() : "+Thread.currentThread().getId());
}@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.i("testThread", "onStart() : "+Thread.currentThread().getId());
}}为什么logcat打印
03-17 03:22:04.397: INFO/testThread(228): activity onCreate() : 1
03-17 03:22:04.697: INFO/testThread(228): service onCreate() : 1
03-17 03:22:04.758: INFO/testThread(228): onStart() : 1
,显示activity和service 是相同的线程id ?
迷惑
解决方案 »
- android 如何监听 去电(去电,去电,去电) 的接通事件
- android4.0.4如何修改进入音乐播放器默认的歌曲列表而不是现在的艺术家列表?
- Android中如何申请Access Token新浪的授权啊?
- svn for android
- 短代问题
- J2Objc在android转换成ios时候无输出,要怎么设置?
- 关于handler的线程通信问题
- 求助——关于控制activity启动的问题(退出应用了,但是服务控制的activity还是启动了)
- 开机后桌面widget显示太慢
- NFC和ZXING扫码问题
- android应该嵌入广告
- android的软键盘能修改吗? 也就是能不能操作软键盘的布局?
都在主UI线程,这就是为什么我们在service的onstart onbind中不能做延时较长的操作。
如果动,就是不同线程.
如果不动,就是在相同线程 (*&&@%*)^&^$$
lz的代码已经给出测试方法了,只是想得到一个确认,2楼给出解答。
另外activity,service之类的组件可以通过process属性设置,可以放到不同进程里
{
private String areaCode;
private String code;
public String getAreaCode()
{
return areaCode;
}
public void setAreaCode(String areaCode)
{
this.areaCode = areaCode;
}
public String getCode()
{
return code;
}
public void setCode(String code)
{
this.code = code;
}
public boolean equals(Object o)
{
boolean flag = false;
if (!(o instanceof MyResponseBean))
{
return false;
}
else
{
MyResponseBean et = (MyResponseBean)o;
String areaCode = this.getAreaCode();
String code = this.getCode();
boolean equals1 = areaCode == null ? false : areaCode.equals(et.getAreaCode());
boolean equals2 = code == null ? false : code.equals(et.getCode());
boolean equals = equals1 && equals2;
if (equals)
{
flag = true;
}
return flag;
}
}
}
activity和service这类组建的实例一般运行在他们进程的主线程中,这样能够解释你的测试结果。文档里面有说明:
http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html
1)如果是service类中自己的方法,那是在同一个线程中。
2)如果你调用的是service中的binder对象的方法,就不是了,binder是在binder thread中处理。
有的人说会NAR,为什么呢?因为binder是同步调用
2.通过继承IntentService得到的Service是在不同的线程的。