相关疑难解决方法(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万
查看次数

有时间延迟重复一项任务?

我的代码中有一个变量,说它是"状态".

我想根据此变量值在应用程序中显示一些文本.这必须在特定的时间延迟下完成.

就像是,

  • 检查状态变量值

  • 显示一些文字

  • 等待10秒钟

  • 检查状态变量值

  • 显示一些文字

  • 等待15秒

等等.时间延迟可能会有所不同,一旦显示文本就会设置.

我试过Thread.sleep(time delay)但失败了.有没有更好的方法来完成这项工作?

android android-thread

202
推荐指数
7
解决办法
16万
查看次数

如何在android中固定一段时间后重复任务?

我想在每5秒后重复调用一个方法,每当我想停止重复调用该方法时,我可能会停止或重新启动该方法的重复调用.

这是一些我想要实现的示例代码.请在这方面帮助我,我将非常感谢你.

private int m_interval = 5000; // 5 seconds by default, can be changed later
private Handler m_handler;

@Override
protected void onCreate(Bundle bundle)
{
  ...
  m_handler = new Handler();
}

Runnable m_statusChecker = new Runnable()
{
     @Override 
     public void run() {
          updateStatus(); //this function can change value of m_interval.
          m_handler.postDelayed(m_statusChecker, m_interval);
     }
};

public void startRepeatingTask()
{
    m_statusChecker.run(); 
}

public void stopRepeatingTask()
{
    m_handler.removeCallbacks(m_statusChecker);
}  
Run Code Online (Sandbox Code Playgroud)

java android

34
推荐指数
3
解决办法
5万
查看次数

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

我有一个非常简单的代码:

package com.example.conn08;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class MainActivity extends Activity
{
    private static CustomHandler mHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        updateUI();
    }
    private class CustomHandler extends Handler
    {
        @Override  
        public void handleMessage(Message msg) 
        {  
            MainActivity.this.updateUI();  
        }  
        public void sleep(long delayMillis)
        {  
            this.removeMessages(0);  
            sendMessageDelayed(obtainMessage(0), delayMillis);  
        }  
    }
    private void updateUI()
    {
        mHandler.sleep(1000);
        Log.v("updateUI", "kokoko");
    }
}
Run Code Online (Sandbox Code Playgroud)

但在

MainActivity.this.updateUI();
Run Code Online (Sandbox Code Playgroud)

我知道了

此Handler类应该是静态的,否则可能会发生泄漏(com.example.conn08.MainActivity.CustomHandler)

为什么?请帮忙


编辑代码:

package com.example.conn08;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler; …
Run Code Online (Sandbox Code Playgroud)

android warnings handler

5
推荐指数
1
解决办法
4491
查看次数

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

在下面的代码中Eclipse生成警告"此Handler类应该是静态的,否则可能会发生泄漏".

public class MyActivity extends Activity implements Runnable
 {
   final Handler handler = new Handler()
    {
      @Override
      public void handleMessage( Message message)
       {
         String sResult = (String) message.obj;
         if( (sResult != null) && (sResult != ""))
           {
             MyNonStatic = (TableLayout) findViewById( R.id.tableLayout); // any non-static method
           }
         return;
       }
    };


   public void run()
    {
      final Message message = handler.obtainMessage( 1, MyFunction( context));
      handler.sendMessage( message);
    }

   public String MyFunction( Context context)
    {
      return "MyNewString";
    }
  }
Run Code Online (Sandbox Code Playgroud)

我在网站上审查了很多主题,但没有得到解决方案.请帮帮我这个代码?

添加:我需要在handleMessage()中调用非静态方法(例如findViewById())!

java android memory-leaks

5
推荐指数
2
解决办法
4195
查看次数