zoukankan      html  css  js  c++  java
  • android service和activity的通讯

    我们须要用下面方式来启动service:

    </pre><pre name="code" class="java"><span style="white-space:pre">		</span>Intent intent = new Intent();
    		intent.setClass(MainActivity.this, MyService.class);
    		<strong>bindService(intent,conn,BIND_AUTO_CREATE);</strong>


    	ServiceConnection conn = new ServiceConnection() {
    		
    		@Override
    		public void onServiceDisconnected(ComponentName name) {
    		}
    		
    		@Override
    		public void onServiceConnected(ComponentName name, IBinder service) {
    			mService = ((MyService.MyBinder)service).getService();  
    		}
    	};
    	


    这时service会运行:onCreate和onBind


    然后


    我们去运行一些任务:

    	ImageView item_image = (ImageView)findViewById(R.id.item_image);
    		item_image.setOnClickListener(new View.OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				<strong>mService.setHandler(mHandler);
    			   mService.startCheckIfUpgrade();</strong>
    			}
    		});
    
    
    	private Handler mHandler = new Handler() {
    		@Override
    		public void handleMessage(Message msg) {
    			switch (msg.what) {
    			case GET_UPGRADE_INFORMATION_COMPLETE:
    				System.out.println("=======notify need upgrade");
    				AlertDialog dialog = getCustomDialog();
    				dialog.show();
    			default:
    				break;
    			}
    		}
    	};

    Service的代码是:

    public class MyService extends Service {
    
    	/** thread to execute background task*/
    	private Thread mThread = null;
    	
    	/** flag indicates if the service has been stopped*/
    	private boolean mStopFlag = false;
    	
    	private static final int GET_UPGRADE_INFORMATION_COMPLETE = 202;
    	
    	/** Handler to get notify from thread*/
    	private Handler mHandler = null;
    	
    	public void setHandler(Handler handler) {
    		this.mHandler = handler;
    	}
    	
    	
    	@Override
    	public boolean onUnbind(Intent intent) {
    		System.out.println("====service onUnbind");
    		return super.onUnbind(intent);
    	}
    
    	public class MyBinder extends Binder {
    		/**
    		 * 获取当前Service的实例
    		 * 
    		 * @return
    		 */
    		public MyService getService() {
    			return MyService.this;
    		}
    	}
    	
    	public void startCheckIfUpgrade() {
    		if(mThread == null){
    			mThread = new UpgradeThread();
    			mThread.start();
    		}
    	}
    	   
    	@Override
    	public IBinder onBind(Intent arg0) {
    		System.out.println("====service onBind");
    		
    		return new MyBinder();
    	}
    	
    	/**
    	 * @see android.app.Service#onCreate()
    	 */
    	@Override
    	public void onCreate() {
    		super.onCreate();
    		System.out.println("====service onCreate");
    	}
    
    	private class UpgradeThread extends Thread{
    
    		/**
    		 * @see java.lang.Thread#run()
    		 */
    		@Override
    		public void run() {
    			super.run();
    			//在这里写去服务端查看是否须要升级的逻辑
    			try {
    				Thread.sleep(3000);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    			boolean ret = true;
    			if(ret && !mStopFlag){
    				Message msg = new Message();
    				msg.what = GET_UPGRADE_INFORMATION_COMPLETE;
    				mHandler.sendMessage(msg);
    			}
    		}
    		
    	}
    	
    	/* (non-Javadoc)
    	 * @see android.app.Service#onDestroy()
    	 */
    	@Override
    	public void onDestroy() {
    		System.out.println("====ondestroy");
    		mStopFlag = true;
    		try {
    			if (null != mThread && mThread.isAlive()) {
    				try
    				{
    					mThread.stop();
    				}
    				catch (Exception e)
    				{
    				}
    			}
    			mThread = null;
    		}
    		catch (Exception e) {
    			e.printStackTrace();
    		}
    		super.onDestroy();
    		System.gc();
    	}
    
    }
    

    当activity销毁后Service会运行:

    onUnbind和onDestroy

    这个说明这个service的生命周期和activity是一致的

  • 相关阅读:
    C++中的空类,编译器默认可以产生哪些成员函数
    野指针(Wild pointer)和悬垂指针(dangling pointer)
    WHY C++ ?(by Herb Sutter) & C++17 standard
    mapreduce 多路输出
    stdout 编码 vim 删除左边,右边
    积累碎片shell
    python logging模块
    shell 流程控制
    shell 变量
    时间管理法则
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5194371.html
Copyright © 2011-2022 走看看