线程挂起与恢复

来源:互联网 发布:经济数据网站 编辑:程序博客网 时间:2024/05/16 09:53
package com.example.uitest;import com.example.uitest.EditBottomToolbar.ColorToolbar;import com.example.uitest.EditBottomToolbar.OnValuesChangedListener;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.app.Activity;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.RelativeLayout;public class MainActivity extends Activity implements OnValuesChangedListener{ RelativeLayout rl; EditBottomToolbar toolbar; ImageView t1 ,t2, t3; ColorToolbar color; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rl = (RelativeLayout) findViewById(R.id.rl); toolbar = EditBottomToolbar.getInstance(this); toolbar.registerOnValuesChangedListener(this); t1 = new ImageView(this); t2 = new ImageView(this); t3 = new ImageView(this); t1.setBackgroundResource(R.drawable.alpha25); t2.setBackgroundResource(R.drawable.alpha75); t3.setBackgroundResource(R.drawable.alpha75); toolbar.addRightImageView(t1); toolbar.addRightImageView(t2); toolbar.showColorToolbar(new int[]{1,2,3,4,5,6,7,8}); rl.addView(toolbar.getMainLayout()); t1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { toolbar.showLineWidthToolbar(new int[]{1,2,3,4}); } }); t2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { toolbar.showColorToolbar(new int[]{1,2,3,4,5,6,7,8}); } }); } public void click(View view) { int id = view.getId(); switch (id) { case R.id.button1: System.out.println("xxx click... button1"); if (mThread == null) { mThread = new DeamonThread(); // mThread.setDaemon(true); mThread.start(); } if (mHandler != null) { mHandler.sendEmptyMessage(0x01); } break; case R.id.textView: System.out.println("xxx click... textView"); break; default: break; } } @Override public void onColorValueChanged() { System.out.println("xxx onColorValueChanged"); } @Override public void onLineWidthValueChanged() { System.out.println("xxx onLineWidthValueChanged"); } @Override public void onOpacityValueChanged() { System.out.println("xxx onOpacityValueChanged"); } protected void onResume() { super.onResume(); if (mThread != null) { mThread.onResume(); } }; @Override protected void onPause() { super.onPause(); System.out.println("xxxx onPause()"); if (mThread != null) { mThread.onSuspend(); } } protected void onStop() { super.onStop(); System.out.println("xxxx onStop()"); }; Handler mHandler  = null; DeamonThread  mThread; class DeamonThread extends Thread { Object mLock  = new Object(); boolean mIsSuspend; void onResume() { synchronized (mLock) { mIsSuspend = false; mLock.notifyAll(); } } void onSuspend() { synchronized (mLock) { mIsSuspend = true; } } void pauseThread() { synchronized (mLock) { if (mIsSuspend) { try { mLock.wait(); } catch (Exception e) { e.printStackTrace(); } } } } @Override public void run() { Looper.prepare(); if (mHandler == null) { mHandler = new Handler(Looper.myLooper()) { @Override public void handleMessage(Message msg) { pauseThread(); if (!mRunning) { mRunning = true; } new NewThread().start(); mHandler.sendEmptyMessageDelayed(++msg.what, 100); } }; } Looper.loop(); } }  int count = -1;  class NewThread extends Thread { @Override public synchronized void start() { try { super.start(); } catch (OutOfMemoryError e) { e.printStackTrace(); mRunning = false; } System.out.println("xxx start:"+ ++count); } @Override public void run() { try { while (mRunning) { sleep(30); } } catch (Exception e) { e.printStackTrace(); } } } boolean mRunning = true;}