Skip to content

Commit 85eb2e1

Browse files
committed
Recycle TextView, show all activities's fragments.
1 parent fcaefbe commit 85eb2e1

5 files changed

Lines changed: 62 additions & 33 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package cc.rome753.activitytask.model;
2+
3+
import android.content.Context;
4+
import android.view.View;
5+
import android.view.ViewGroup;
6+
7+
import java.util.LinkedList;
8+
9+
import cc.rome753.activitytask.view.ObserverTextView;
10+
11+
public class TextViewFractory {
12+
13+
LinkedList<ObserverTextView> pool = new LinkedList<>();
14+
private static TextViewFractory factory = new TextViewFractory();
15+
public static TextViewFractory get() {
16+
return factory;
17+
}
18+
19+
public void recycle(ViewGroup viewGroup) {
20+
if(viewGroup != null) {
21+
for(int i = 0; i < viewGroup.getChildCount(); i++) {
22+
View view = viewGroup.getChildAt(i);
23+
if(view instanceof ObserverTextView) {
24+
pool.add((ObserverTextView) view);
25+
} else if(view instanceof ViewGroup) {
26+
recycle((ViewGroup) view);
27+
}
28+
}
29+
}
30+
}
31+
32+
public ObserverTextView getOne(Context context) {
33+
ObserverTextView view;
34+
if(pool.isEmpty()) {
35+
view = new ObserverTextView(context);
36+
} else {
37+
view = pool.remove();
38+
}
39+
return view;
40+
}
41+
42+
}

activitytaskview/src/main/java/cc/rome753/activitytask/view/ActivityTaskView.java

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.util.Log;
66
import android.view.MotionEvent;
77
import android.view.View;
8+
import android.view.ViewGroup;
89
import android.view.WindowManager;
910
import android.widget.FrameLayout;
1011
import android.widget.LinearLayout;
@@ -17,6 +18,7 @@
1718
import cc.rome753.activitytask.R;
1819
import cc.rome753.activitytask.model.ATree;
1920
import cc.rome753.activitytask.model.LifecycleInfo;
21+
import cc.rome753.activitytask.model.TextViewFractory;
2022

2123
/**
2224
* Created by rome753 on 2017/3/31.
@@ -25,13 +27,12 @@
2527
public class ActivityTaskView extends LinearLayout {
2628

2729
public static final String TAG = ActivityTaskView.class.getSimpleName();
28-
private LinearLayout mLinearLayout;
29-
private FrameLayout mContainer;
30+
private ViewGroup mLinearLayout;
31+
private ViewGroup mContainer;
3032
private View mTinyView;
3133
private View mTaskView;
3234
private View mEmptyView;
3335

34-
private LifecycleObservable mObservable;
3536

3637
private int mStatusHeight;
3738
private int mScreenWidth;
@@ -46,7 +47,6 @@ public ActivityTaskView(Context context) {
4647
mTinyView = findViewById(R.id.tiny_view);
4748
mTaskView = findViewById(R.id.task_view);
4849
mEmptyView = findViewById(R.id.view_empty);
49-
mObservable = new LifecycleObservable();
5050
}
5151

5252
public FragmentTaskView findFragmentTaskView(String activity) {
@@ -127,48 +127,37 @@ private void moveToBorder() {
127127
public void add(LifecycleInfo info) {
128128
FragmentTaskView view = new FragmentTaskView(getContext());
129129
view.setTag(info.activity);
130-
mContainer.addView(view);
130+
mContainer.addView(view, 0);
131131

132132
aTree.add(info.task, info.activity, info.lifecycle);
133133
notifyData();
134134
}
135135

136136
public void remove(LifecycleInfo info) {
137-
mContainer.removeView(findFragmentTaskView(info.activity));
137+
FragmentTaskView view = findFragmentTaskView(info.activity);
138+
TextViewFractory.get().recycle(view);
139+
mContainer.removeView(view);
138140

139141
aTree.remove(info.task, info.activity);
140142
notifyData();
141143
}
142144

143145
public void update(LifecycleInfo info) {
144-
if(info.lifecycle.contains("Resume")) {
145-
FragmentTaskView view = findFragmentTaskView(info.activity);
146-
if(view != null) {
147-
view.setVisibility(VISIBLE);
148-
}
149-
} else if(info.lifecycle.contains("Pause")) {
150-
FragmentTaskView view = findFragmentTaskView(info.activity);
151-
if(view != null) {
152-
view.setVisibility(GONE);
153-
}
154-
}
155-
156146
aTree.updateLifecycle(info.activity, info.lifecycle);
157147
notifyData();
158148
}
159149

160150
private void notifyData() {
151+
TextViewFractory.get().recycle(mLinearLayout);
161152
mLinearLayout.removeAllViews();
162-
mObservable.deleteObservers();
163153
Set<Map.Entry<String, ArrayList<String>>> set = aTree.entrySet();
164154
for(Map.Entry<String, ArrayList<String>> entry : set) {
165155
TaskLayout layout = new TaskLayout(getContext());
166156
layout.setTitle(entry.getKey());
167157
for (String value : entry.getValue()) {
168-
ObserverTextView textView = new ObserverTextView(getContext());
158+
ObserverTextView textView = TextViewFractory.get().getOne(getContext());
169159
textView.setInfoText(value, aTree.getLifecycle(value));
170-
layout.add(textView);
171-
mObservable.addObserver(textView);
160+
layout.addFirst(textView);
172161
}
173162
mLinearLayout.addView(layout, 0);
174163
}

activitytaskview/src/main/java/cc/rome753/activitytask/view/FragmentTaskView.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
import android.util.AttributeSet;
66
import android.widget.LinearLayout;
77

8-
import java.util.HashMap;
98
import java.util.List;
109

1110
import cc.rome753.activitytask.model.FTree;
1211
import cc.rome753.activitytask.model.LifecycleInfo;
12+
import cc.rome753.activitytask.model.TextViewFractory;
1313

1414

1515
/**
@@ -20,8 +20,6 @@ public class FragmentTaskView extends LinearLayout {
2020

2121
FTree mTree = new FTree();
2222

23-
LifecycleObservable mLifecycleObservable;
24-
2523
public FragmentTaskView(Context context) {
2624
this(context, null);
2725
}
@@ -30,7 +28,6 @@ public FragmentTaskView(Context context, AttributeSet attrs) {
3028
super(context, attrs);
3129
setOrientation(VERTICAL);
3230
setBackgroundColor(Color.parseColor("#333333"));
33-
mLifecycleObservable = new LifecycleObservable();
3431
}
3532

3633
public void add(LifecycleInfo info) {
@@ -49,17 +46,16 @@ public void update(LifecycleInfo info) {
4946
}
5047

5148
private void notifyData(){
49+
TextViewFractory.get().recycle(this);
5250
removeAllViews();
53-
mLifecycleObservable.deleteObservers();
5451
if(mTree != null){
5552
List<String> strings = mTree.convertToList();
5653
for(String s : strings){
57-
ObserverTextView textView = new ObserverTextView(getContext());
54+
ObserverTextView textView = TextViewFractory.get().getOne(getContext());
5855
String[] arr = s.split(String.valueOf('\u2500')); // -
5956
String name = arr[arr.length - 1];
6057
textView.setInfoText(s, mTree.getLifecycle(name));
6158
addView(textView);
62-
mLifecycleObservable.addObserver(textView);
6359
}
6460
}
6561
}

activitytaskview/src/main/java/cc/rome753/activitytask/view/TaskLayout.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Context;
44
import android.util.AttributeSet;
55
import android.view.View;
6+
import android.widget.FrameLayout;
67
import android.widget.LinearLayout;
78
import android.widget.TextView;
89

@@ -13,7 +14,7 @@
1314
* Created by rome753 on 2017/3/31.
1415
*/
1516

16-
public class TaskLayout extends LinearLayout {
17+
public class TaskLayout extends FrameLayout {
1718

1819
LinearLayout ll;
1920
TextView tv;
@@ -33,7 +34,7 @@ public void setTitle(String title) {
3334
tv.setText("[" + title + "]");
3435
}
3536

36-
public void add(View view) {
37+
public void addFirst(View view) {
3738
ll.addView(view, 0);
3839
}
3940

activitytaskview/src/main/res/layout/view_activity_task.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,14 @@
3636
android:layout_width="wrap_content"
3737
android:layout_height="wrap_content"/>
3838

39-
<FrameLayout
39+
<LinearLayout
4040
android:id="@+id/fl"
41+
android:orientation="vertical"
4142
android:layout_marginRight="2dp"
4243
android:layout_width="wrap_content"
4344
android:layout_height="wrap_content"
4445
android:layout_marginEnd="2dp">
45-
</FrameLayout>
46+
</LinearLayout>
4647

4748
</LinearLayout>
4849
</FrameLayout>

0 commit comments

Comments
 (0)