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 ?
迷惑

解决方案 »

  1.   

    同一个apk下面的service和Activity没有特殊的情况下,一般是在同一个进程的同一个线程里面的。
    都在主UI线程,这就是为什么我们在service的onstart onbind中不能做延时较长的操作。
      

  2.   

    在界面上显示个进度条,然后在Service里做耗时的操作,看进度条还动不动.
    如果动,就是不同线程.
    如果不动,就是在相同线程 (*&&@%*)^&^$$
      

  3.   

    这个太2了吧。
    lz的代码已经给出测试方法了,只是想得到一个确认,2楼给出解答。
    另外activity,service之类的组件可以通过process属性设置,可以放到不同进程里
      

  4.   

    public class MyResponseBean
    {
        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;
            }
        }
    }
      

  5.   

    在默认情况下 activity和service在不同进程中启动, 所以肯定在不同的线程中。
    activity和service这类组建的实例一般运行在他们进程的主线程中,这样能够解释你的测试结果。文档里面有说明:
    http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html   
      

  6.   

    同一个包内的activity和service,如果service没有设定属性android:process=":remote"的话,service会和activity跑在同一个进程中,由于一个进程只有一个UI线程,所以,service和acitivity就是在同一个线程里面的。
      

  7.   

    一般是和启动service的那个activity是一个线程,但是不排除没有activity,直接开机就启动的service
      

  8.   

    不一定。首先假设service和activity在同一个进程。
    1)如果是service类中自己的方法,那是在同一个线程中。
    2)如果你调用的是service中的binder对象的方法,就不是了,binder是在binder thread中处理。
    有的人说会NAR,为什么呢?因为binder是同步调用
      

  9.   

    1.通过startService()和bindService()方法启动的service和主UI是在同一个线程的。
    2.通过继承IntentService得到的Service是在不同的线程的。
      

  10.   

    对二点,不能这么说的,IntentService只是继承了service,然后在里面启动了一个HandlerThread,然后处理事情,实际上只有处理的事情是在别的线程中的,service本身的一些方法还是在UI Thread中