相关疑难解决方法(0)

此Handler类应该是静态的,否则可能会发生泄漏:IncomingHandler

我正在开发一个带有服务的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

287
推荐指数
4
解决办法
13万
查看次数

Android Handler改变了WeakReference

我的静态处理程序有一个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)

android weak-references handler

6
推荐指数
1
解决办法
3234
查看次数