我正在开发一个带有服务的Android 2.3.3应用程序.我在服务中有这个与Main活动进行通信:
public class UDPListenerService extends Service
{
private static final String TAG = "UDPListenerService";
//private ThreadGroup myThreads = new ThreadGroup("UDPListenerServiceWorker");
private UDPListenerThread myThread;
/**
* Handler to communicate from WorkerThread to service.
*/
private Handler mServiceHandler;
// Used to receive messages from the Activity
final Messenger inMessenger = new Messenger(new IncomingHandler());
// Use to send message to the Activity
private Messenger outMessenger;
class IncomingHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
}
}
/**
* Target we …Run Code Online (Sandbox Code Playgroud) android memory-leaks static-classes android-lint android-handler
我的静态处理程序有一个WeakReference对我Activity(这是为了防止记录良好的内存泄漏问题).
我发布了一条很长的延迟消息,我希望这条消息传递给我的活动(应该在前台).
我担心的是,在方向改变时,我的活动被破坏,处理程序引用了应该被销毁的旧活动.
为了在我onCreate的活动中解决这个问题,我这样做了.
if(mHandler == null)
mHandler = new LoginHandler(this);
else {
mHandler.setTarget(this);
}
Run Code Online (Sandbox Code Playgroud)
我的处理程序被声明为一个静态全局变量:
private static LoginHandler mHandler = null;
Run Code Online (Sandbox Code Playgroud)
并且实现类也是静态的,如下所示:
private static class LoginHandler extends Handler {
private WeakReference<LoginActivity> mTarget;
LoginHandler(LoginActivity target) {
mTarget = new WeakReference<LoginActivity>(target);
}
public void setTarget(LoginActivity target) {
mTarget = new WeakReference<LoginActivity>(target);
}
@Override
public void handleMessage(Message msg) {
// process incoming messages here
LoginActivity activity = mTarget.get();
switch (msg.what) {
case Constants.SUCCESS:
activity.doSomething();
break;
default: …Run Code Online (Sandbox Code Playgroud)