Skip to content

Commit af06c74

Browse files
committed
feat: 增加短时间内日志输出次数检测防止输出大量日志导致启动器卡死
1 parent 50211e2 commit af06c74

File tree

3 files changed

+28
-60
lines changed

3 files changed

+28
-60
lines changed

FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -463,13 +463,13 @@ private void initRightMenu() {
463463
return true;
464464
}));
465465

466-
logWindow.visibilityProperty().setValue(menuSetting.isShowLog() || (!isSimulated() && menuSetting.isAutoShowLog()));
466+
logWindow.setVisibility(menuSetting.isShowLog() || (!isSimulated() && menuSetting.isAutoShowLog()));
467467
menuSetting.getShowLogProperty().addListener(observable -> {
468-
logWindow.visibilityProperty().setValue(menuSetting.isShowLog());
468+
logWindow.setVisibility(menuSetting.isShowLog());
469469
});
470470
menuSetting.getAutoShowLogProperty().addListener(observable -> {
471471
if (baseLayout.getBackground() != null) {
472-
logWindow.visibilityProperty().setValue(menuSetting.isAutoShowLog());
472+
logWindow.setVisibility(menuSetting.isAutoShowLog());
473473
}
474474
});
475475

@@ -717,7 +717,7 @@ public void onGraphicOutput() {
717717
baseLayout.setBackground(null);
718718
baseLayout.removeView(launchProgress);
719719
if (!menuSetting.isShowLog() && menuSetting.isAutoShowLog()) {
720-
logWindow.visibilityProperty().setValue(false);
720+
logWindow.setVisibility(false);
721721
}
722722
refreshWindowsSize(menuSetting.getWindowScale());
723723
}

FCL/src/main/java/com/tungsten/fcl/control/JarExecutorMenu.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void setup(FCLActivity activity, FCLBridge fclBridge) {
7373
cursorView = findViewById(R.id.cursor);
7474
touchCharInput = findViewById(R.id.input_scanner);
7575
touchPad.setOnTouchListener(this);
76-
logWindow.setVisibilityValue(true);
76+
logWindow.setVisibility(true);
7777
touchCharInput.setCharacterSender(null, new AwtCharSender(awtInput));
7878

7979
forceExit = findViewById(R.id.force_exit);
@@ -202,7 +202,7 @@ public void onClick(View view) {
202202
builder.create().show();
203203
}
204204
if (view == showLog) {
205-
logWindow.setVisibilityValue(!logWindow.getVisibilityValue());
205+
logWindow.setVisibility(!(logWindow.getVisibility() == View.VISIBLE));
206206
}
207207
if (view == mouseMode) {
208208
clickMode = !clickMode;

FCL/src/main/java/com/tungsten/fcl/control/view/LogWindow.java

Lines changed: 22 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@
1414
import com.tungsten.fclcore.task.Schedulers;
1515
import com.tungsten.fcllibrary.component.view.FCLTextView;
1616

17+
import java.util.ArrayList;
18+
import java.util.List;
19+
1720
public class LogWindow extends ScrollView {
1821

19-
private boolean autoTint;
20-
private BooleanProperty visibilityProperty;
22+
private final boolean autoTint;
2123
private FCLTextView textView;
2224
private int lineCount;
23-
25+
private final List<Long> timeList = new ArrayList<>();
2426
public LogWindow(Context context) {
2527
super(context);
2628
autoTint = false;
@@ -29,25 +31,17 @@ public LogWindow(Context context) {
2931

3032
public LogWindow(Context context, AttributeSet attrs) {
3133
super(context, attrs);
32-
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.LogWindow);
33-
autoTint = typedArray.getBoolean(R.styleable.LogWindow_auto_log_tint, false);
34-
typedArray.recycle();
34+
try(TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.LogWindow)) {
35+
autoTint = typedArray.getBoolean(R.styleable.LogWindow_auto_log_tint, false);
36+
}
3537
init(context);
3638
}
3739

3840
public LogWindow(Context context, AttributeSet attrs, int defStyleAttr) {
3941
super(context, attrs, defStyleAttr);
40-
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.LogWindow);
41-
autoTint = typedArray.getBoolean(R.styleable.LogWindow_auto_log_tint, false);
42-
typedArray.recycle();
43-
init(context);
44-
}
45-
46-
public LogWindow(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
47-
super(context, attrs, defStyleAttr, defStyleRes);
48-
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.LogWindow);
49-
autoTint = typedArray.getBoolean(R.styleable.LogWindow_auto_log_tint, false);
50-
typedArray.recycle();
42+
try(TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.LogWindow)) {
43+
autoTint = typedArray.getBoolean(R.styleable.LogWindow_auto_log_tint, false);
44+
}
5145
init(context);
5246
}
5347

@@ -62,46 +56,14 @@ private void init(Context context) {
6256
textView.setEllipsize(null);
6357
}
6458

65-
public final void setVisibilityValue(boolean visibility) {
66-
visibilityProperty().set(visibility);
67-
}
68-
69-
public final boolean getVisibilityValue() {
70-
return visibilityProperty == null || visibilityProperty.get();
71-
}
72-
73-
public final BooleanProperty visibilityProperty() {
74-
if (visibilityProperty == null) {
75-
visibilityProperty = new BooleanPropertyBase() {
76-
77-
@Override
78-
public void invalidated() {
79-
Schedulers.androidUIThread().execute(() -> {
80-
boolean visible = get();
81-
setVisibility(visible ? VISIBLE : GONE);
82-
if (!visible) {
83-
cleanLog();
84-
}
85-
});
86-
}
87-
88-
@Override
89-
public Object getBean() {
90-
return this;
91-
}
92-
93-
@Override
94-
public String getName() {
95-
return "visibility";
96-
}
97-
};
98-
}
99-
100-
return visibilityProperty;
59+
public final void setVisibility(boolean visibility) {
60+
setVisibility(visibility ? VISIBLE : GONE);
61+
if (!visibility)
62+
cleanLog();
10163
}
10264

10365
public void appendLog(String str) {
104-
if (!getVisibilityValue()) {
66+
if (getVisibility() != VISIBLE) {
10567
return;
10668
}
10769
lineCount++;
@@ -115,6 +77,12 @@ public void appendLog(String str) {
11577
fullScroll(View.FOCUS_DOWN);
11678
}
11779
});
80+
long now = System.currentTimeMillis();
81+
timeList.removeIf(time -> now - time > 200);
82+
timeList.add(now);
83+
if (timeList.size() > 200) {
84+
setVisibility(false);
85+
}
11886
}
11987

12088
public void cleanLog() {

0 commit comments

Comments
 (0)