注意:我没有任何错误,我只想以某种方式改进我的日志记录处理。
我有一个抓住互联网的应用程序,现在我在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>