android 服务与多线程

版权所有,禁止匿名转载;禁止商业使用。

android服务是运行在UI主线程的。一下是代码demo:

package com.example.testservice;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startService(new Intent(MainActivity.this,ServiceTest.class));
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }
  
}
package com.example.testservice;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;
public class ServiceTest extends Service {
private Handler mHandler=new Handler(){
  @Override
  public void handleMessage(Message msg) {
    switch (msg.what) {
    case 1:
      new Thread(){
        @Override
        public void run() {
          Log.i("服务", "第2个线程");
          Looper.prepare();
          for(int i=10;i<20;i++){
            Toast.makeText(getApplicationContext(), i+"",0).show();
            try {
              //Thread.sleep(1000);
            } catch (Exception e) {
              // TODO: handle exception
            }
            
            
          }
          mHandler.sendEmptyMessage(2);
          Looper.loop();
        };
      }.start();
      
      break;
    case 2:
      new Thread(){
        @Override
        public void run() {
          Log.i("服务", "第3个线程");
          Looper.prepare();
          for(int i=20;i<30;i++){
            Toast.makeText(getApplicationContext(), i+"",0).show();
            try {
              //Thread.sleep(1000);
            } catch (Exception e) {
              // TODO: handle exception
            }
            
            
          }
          mHandler.sendEmptyMessage(3);
          Looper.loop();
        };
      }.start();
      break;
      
    case 3:
       onDestroy();
      break;
    default:
      break;
    }
    super.handleMessage(msg);
  }
  
  
};
  public ServiceTest() {
    // TODO Auto-generated constructor stub
  }
  @Override
  public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
  }
  @Override
  public void onCreate() {
    Log.i("服务", "onCreate()");
    super.onCreate();
    new Thread(){
      @Override
      public void run() {
        Log.i("服务", "第一个线程");
        Looper.prepare();
        for(int i=0;i<10;i++){
          Toast.makeText(getApplicationContext(), i+"",0).show();
          try {
            //Thread.sleep(1000);
          } catch (Exception e) {
            // TODO: handle exception
          }
          
          
        }
        mHandler.sendEmptyMessage(1);
        Looper.loop();
      };
    }.start();
  }
  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    Log.i("服务", "onStartCommand");
    
    
    return super.onStartCommand(intent, flags, startId);
  }
  @Override
  public void onDestroy() {
    Log.i("服务", "onDestroy()");
    super.onDestroy();
    stopSelf();
  }
 
}

 

0 0