Проблема с Handler и Activity
Добавлено: 13 фев 2013, 08:58
По примеру с данного сайта в приложении реализовал обмен сообщениями с Bluetooth при помощи Handler, но компилятор показывал варнинг:
Но, теперь у меня error'ы такие (см. скриншот handler.png)
Исходник такой:
В общем ругается на строчки взаимодействия с активити startActivityForResult и Toast.
Нашел вот такое решение: http://www.androiddesignpatterns.com/20 ... -leak.htmlThis Handler class should be static or leaks might occur
Но, теперь у меня error'ы такие (см. скриншот handler.png)
Исходник такой:
Код: Выделить всё
public class ActivityAccelerometer extends Activity implements SensorEventListener {
...
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_accelerometer);
...
...
mHandler.postDelayed(sRunnable, 600000);
finish();
}
private static class MyHandler extends Handler {
private final WeakReference<ActivityAccelerometer> mActivity;
public MyHandler(ActivityAccelerometer activity) {
mActivity = new WeakReference<ActivityAccelerometer>(activity);
}
@Override
public void handleMessage(Message msg) {
ActivityAccelerometer activity = mActivity.get();
if (activity != null) {
switch (msg.what) {
case cBluetooth.BL_NOT_AVAILABLE:
Log.d(cBluetooth.TAG, "Bluetooth is not available. Exit");
Toast.makeText(getBaseContext(), "Bluetooth is not available", Toast.LENGTH_SHORT).show();
finish();
break;
case cBluetooth.BL_INCORRECT_ADDRESS:
Log.d(cBluetooth.TAG, "Incorrect MAC address");
Toast.makeText(getBaseContext(), "Incorrect Bluetooth address", Toast.LENGTH_SHORT).show();
break;
case cBluetooth.BL_REQUEST_ENABLE:
Log.d(cBluetooth.TAG, "Request Bluetooth Enable");
BluetoothAdapter.getDefaultAdapter();
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1);
break;
case cBluetooth.BL_SOCKET_FAILED:
Toast.makeText(getBaseContext(), "Socket failed", Toast.LENGTH_SHORT).show();
finish();
break;
}
}
}
}
private final MyHandler mHandler = new MyHandler(this);
// Instances of anonymous classes do not hold an implicit
// reference to their outer class when they are "static".
private final static Runnable sRunnable = new Runnable() {
public void run() { }
};