80,349
社区成员
发帖
与我相关
我的任务
分享
/**
* avoid 'This Handler class should be static or leaks might occur' warning
*/
private static class weakreferenceHandler extends Handler {
}
/**
* handler
*/
private final Handler mHandler = new weakreferenceHandler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_USER_RUNNABLE_BEGIN1:
onChangeText("thread1 begin " + msg.arg1);
break;
case MSG_USER_RUNNABLE_END1:
onChangeText("thread1 end " + msg.arg1);
break;
case MSG_USER_RUNNABLE_BEGIN2:
onChangeText("thread2 begin " + msg.arg1);
break;
case MSG_USER_RUNNABLE_END2:
onChangeText("thread2 end " + msg.arg1);
break;
case MSG_USER_RUNNABLE_BEGIN3:
onChangeText("thread3 begin " + msg.arg1);
break;
case MSG_USER_RUNNABLE_END3:
onChangeText("thread3 end " + msg.arg1);
break;
}
}
};
package com.example.testweakreference.activity;
import java.lang.ref.WeakReference;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import com.example.testweakreference.R;
public class SlaveActivity extends Activity {
private static final String TAG = "SlaveActivity";
private static final int WM_USER_WAITINGG = 1;
private final long WAIT_TIME1 = 30000;
private final long WAIT_TIME2 = 60000;
private TextView mTvGC;
private Button mBtnPostMessage;
TestGC testGC1;
TestGC testGC2;
private int i = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate is called");
setContentView(R.layout.activity_slave);
iniUI();
iniData();
}
@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;
}
/**
* ini ui
*/
private void iniUI() {
mTvGC = (TextView)findViewById(R.id.tvGC);
mBtnPostMessage = (Button)findViewById(R.id.btnPostMessage);
mBtnPostMessage.setOnClickListener(mAnonymousOnClickListener);
}
/**
* ini data
*/
private void iniData() {
for (i=411; i<=413; i++) {
TestGC testGC = new TestGC(i);
Log.v(TAG, "TestGC value : " + testGC.joke);
}
testGC1 = new TestGC(94411);
testGC2 = new TestGC(94412);
Log.v(TAG, "testGC1 value : " + testGC1.joke);
Log.v(TAG, "testGC2 value : " + testGC2.joke);
}
@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "onStart is called");
};
@Override
protected void onResume() {
super.onResume();
Log.v(TAG, "onResume is called");
};
@Override
protected void onPause() {
super.onPause();
Log.v(TAG, "onPause is called");
};
@Override
protected void onStop() {
super.onStop();
Log.v(TAG, "onStop is called");
};
@Override
protected void onRestart() {
super.onRestart();
Log.v(TAG, "onRestart is called");
};
@Override
protected void onDestroy() {
super.onStart();
Log.v(TAG, "onDestroy is called");
//mHandler.removeCallbacksAndMessages(null);
};
@Override
protected void finalize() {
try {
super.finalize();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Log.v(TAG, "finalize is called");
}
};
private class TestGC {
int joke;
private TestGC(int j) {
joke = j;
}
@Override
protected void finalize() {
// TODO Auto-generated method stub
try {
super.finalize();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Log.v(TAG, "TestGC finalize is called : " + joke);
}
}
}
/**
* anonymous inner class
*/
private final OnClickListener mAnonymousOnClickListener = new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch(arg0.getId()) {
case R.id.btnPostMessage: {
mTvGC.setText("btnPostMessage clicked ");
mHandler.postDelayed(mRunnable, WAIT_TIME1);
mHandler.sendEmptyMessageDelayed(WM_USER_WAITINGG, WAIT_TIME2);
}
break;
default:
break;
}
}
};
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Log.v(TAG, "Runnable is called : " + testGC1.joke);
}
};
private MyHandler mHandler = new MyHandler(this);
private static class MyHandler extends Handler {
private SlaveActivity mActivity;
/**
* @param activity
*/
public MyHandler(SlaveActivity activity) {
WeakReference<SlaveActivity> WeakReference = new WeakReference<SlaveActivity>(activity);
mActivity = WeakReference.get();
}
/**
* Subclasses must implement this to receive messages.
*/
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case WM_USER_WAITINGG:
Log.v(TAG, "WM_USER_WAITINGG message is doing : " + mActivity.testGC2.joke);
break;
default:
break;
}
}
}
// private Handler mHandler = new Handler() {
// /**
// * Subclasses must implement this to receive messages.
// */
// @Override
// public void handleMessage(Message msg) {
// switch (msg.what) {
// case WM_USER_WAITINGG:
// Log.v(TAG, "WM_USER_WAITINGG message is doing : " + testGC2.joke);
// break;
//
// default:
// break;
// }
// }
// };
}
private MyHandler mHandler = new MyHandler(this);
private static class MyHandler extends Handler {
private MainActivity mActivity;
/**
* @param activity
*/
public MyHandler(MainActivity activity) {
WeakReference<MainActivity> WeakReference = new WeakReference<MainActivity>(activity);
mActivity = WeakReference.get();
}
package com.example.testweakreference.activity;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import com.example.testweakreference.R;
public class SlaveActivity extends Activity {
private static final String TAG = "SlaveActivity";
private static final int WM_USER_WAITINGG = 1;
private final int WAIT_TIME = 30000;
private TextView mTvGC;
private Button mBtnPostMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate is called");
setContentView(R.layout.activity_slave);
iniUI();
iniData();
}
@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;
}
/**
* ini ui
*/
private void iniUI() {
mTvGC = (TextView)findViewById(R.id.tvGC);
mBtnPostMessage = (Button)findViewById(R.id.btnPostMessage);
mBtnPostMessage.setOnClickListener(mAnonymousOnClickListener);
}
/**
* ini data
*/
private void iniData() {
for (int i=0; i<=413; i++) {
TestGC testGC = new TestGC(i);
Log.v(TAG, "TestGC value : " + testGC.joke);
}
}
@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "onStart is called");
};
@Override
protected void onResume() {
super.onResume();
Log.v(TAG, "onResume is called");
};
@Override
protected void onPause() {
super.onPause();
Log.v(TAG, "onPause is called");
};
@Override
protected void onStop() {
super.onStop();
Log.v(TAG, "onStop is called");
};
@Override
protected void onRestart() {
super.onRestart();
Log.v(TAG, "onRestart is called");
};
@Override
protected void onDestroy() {
super.onStart();
Log.v(TAG, "onDestroy is called");
};
@Override
protected void finalize() {
try {
super.finalize();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Log.v(TAG, "finalize is called");
}
};
private class TestGC {
int joke;
private TestGC(int j) {
joke = j;
}
@Override
protected void finalize() {
// TODO Auto-generated method stub
try {
super.finalize();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Log.v(TAG, "TestGC finalize is called : " + joke);
}
}
}
/**
* anonymous inner class
*/
private final OnClickListener mAnonymousOnClickListener = new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch(arg0.getId()) {
case R.id.btnPostMessage: {
mTvGC.setText("btnPostMessage clicked ");
mHandler.sendEmptyMessageDelayed(WM_USER_WAITINGG, WAIT_TIME);
}
break;
default:
break;
}
}
};
private Handler mHandler = new Handler() {
/**
* Subclasses must implement this to receive messages.
*/
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case WM_USER_WAITINGG:
Log.v(TAG, "WM_USER_WAITINGG message is done");
break;
default:
break;
}
}
};
}
private static class MyHandler extends Handler {
WeakReference<MainActivity> mActivity;
MyHandler(MainActivity mActivity){
this.mActivity = new WeakReference<MainActivity>(mActivity);
}
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case IMAGE_FAILURE:
Toast.makeText(mActivity.get()
, "Image Failure", Toast.LENGTH_LONG).show();
break;
case IMAGE_SUCCESS:
Log.i(TAG, "success");
FileInputStream fis = null;
byte[] bytes = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len;
try {
File sdCardDir = Environment.getExternalStorageDirectory();
File imgFile = new File(sdCardDir, "image/xxx");
fis = new FileInputStream(imgFile);
while( (len=fis.read(bytes))!=-1 ){
baos.write(bytes, 0, len);
}
} catch (FileNotFoundException e) {
Log.i(TAG, e.toString());
} catch (IOException e) {
Log.i(TAG, e.toString());
}
Bitmap bMap = BitmapFactory.decodeByteArray(
baos.toByteArray(), 0, baos.toByteArray().length);
mActivity.get().iv.setImageBitmap(bMap);
try {
baos.flush();
baos.close();
} catch (IOException e) {
Log.i(TAG, e.toString());
}
}
}
}