Android:正确处理日志记录(大量日志记录) - AsyncTask或Handler

时间:2017-10-04 14:42:39

标签: java android android-asynctask android-handler

注意:我没有任何错误,我只想以某种方式改进我的日志记录处理。

我有一个抓住互联网的应用程序,现在我在webview中附加了一个javascript,它通过我在JS脚本中公开的Javascript界面​​记录了很多(几乎每隔5-10秒)。我知道正确的做法是处理我正在使用的javascript中的日志记录。

但是,我还想知道当我放入后台线程而不是仅仅在UI线程中立即记录时,哪种方法处理它更好。

我目前所做的是在Singleton中创建一个Handler以避免它的多个实例。

public class SingletonHandler {

    private static SingletonHandler instance;

    private Handler logHandler;

    private SingletonHandler(){
        this.logHandler = createLogHandler();
    }

    public static SingletonHandler getInstance(){
        if(instance == null){
            synchronized (SingletonHandler.class) {
                if(instance == null){
                    instance = new SingletonHandler();
                }
            }
        }
        return instance;
    }

    private Handler createLogHandler() {
        HandlerThread logHandlerThread = new HandlerThread("LogHandlerThread");
        logHandlerThread.start();
        Handler handler = new Handler(logHandlerThread.getLooper()) {
            public void handleMessage(Message msg) {
                String message = (String)msg.getData().get("message");
                String tag = (String)msg.getData().get("tag");
                String type = (String)msg.getData().get("type");

                Logger logger = LoggerFactory.getLogger(tag);
                if (type.equals(LogType.ERROR.getKey())) {                          
                    logger.error(message);
                } else if (type.equals(LogType.INFO.getKey())) {
                    logger.info(message);
                } else if (type.equals(LogType.WARN.getKey())) {
                    logger.warn(message);
                } else if (type.equals(LogType.DEBUG.getKey())){
                    logger.debug(message);
                } else {
                    logger.trace(message);
                }
            }
        };
        return handler;
    }


    public Handler getLogHandler(){
        return this.logHandler;
    }

}

这是我的LogManager。

public class LogManager(){

    private static final Handler logHandler = SingletonHandler.getInstance().get

    public void logInfoMessage(String tag, String Message){
        if(MyConfig.isLoggingEnabled()){
            logMessage(tag, "INFO", message);
        }
    }

    public static void sendLogMessage(String type, String tag, String message) {

        Bundle bundle = new Bundle();

        bundle.putString(LOG_MESSAGE, message);
        bundle.putString(LOG_TAG, tag);
        bundle.putString(LOG_TYPE, type);

        Message messageToSend = logHandler.obtainMessage();
        messageToSend.setData(bundle);
        logHandler.sendMessage(messageToSend);
    }
}

当我关闭日志记录时,性能会大幅提升(30% - 40%)。

  

MyConfig.isLoggingEnabled()

另外,在我的处理程序中,我之前使用过

  

logHandler.post(可运行)

但是,我收到OutOfMemory错误,因此我决定使用 sendMessage(消息)

同样,我将减少脚本中的日志记录,但是我仍然需要一些日志,我可能会将其减少高达20%。我仍然可以记录每一次(10-20秒)。

有没有更好的方法来处理它?<​​/ p>

0 个答案:

没有答案