回答編集履歴

1

追記

2016/06/10 03:04

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -11,3 +11,109 @@
11
11
 
12
12
 
13
13
  コードが書かれていないため、どこが悪いとは指摘できませんが…
14
+
15
+
16
+
17
+ ---
18
+
19
+ 以下追記
20
+
21
+ ###コード改善のアドバイス
22
+
23
+ まずぱっとみ、Threadを作りすぎだと思います。設計としては、Sakura自身をスレッドにするのではなく、Sakuraの配列を管理するスレッドを作りましょう。簡素に書きますので、エラーとかあったらご容赦を。
24
+
25
+ ```Java
26
+
27
+ // CanvasView
28
+
29
+ public void run(){
30
+
31
+ // Sakura管理スレッドここから
32
+
33
+ Thread sakuraManageThread = new Thread(new Runnable() {
34
+
35
+ public void run() {
36
+
37
+ while(true) {
38
+
39
+ try{
40
+
41
+ Thread.sleep(5);
42
+
43
+ }
44
+
45
+ catch(InterruptedException e){
46
+
47
+ throw new RuntimeException(e);
48
+
49
+ }
50
+
51
+ for(int i=0;i<sakuraCount;i++) {
52
+
53
+ Sakura s = sakura[i];
54
+
55
+ s.update();
56
+
57
+ }
58
+
59
+ }
60
+
61
+ }
62
+
63
+ });
64
+
65
+ sakuraManageThread.start();
66
+
67
+ // ここまで
68
+
69
+ while (trueOrFalse == true){
70
+
71
+ //省略
72
+
73
+ }
74
+
75
+ }
76
+
77
+
78
+
79
+ // Sakura
80
+
81
+ // Thread継承をやめ、runのかわりに下記に置き換える
82
+
83
+ public void update() {
84
+
85
+ if(select == 1){
86
+
87
+ pointX += (Math.random() * 1);
88
+
89
+ }
90
+
91
+ else{
92
+
93
+ pointX -= (Math.random() * 1);
94
+
95
+ }
96
+
97
+
98
+
99
+ phi += Math.PI / (rnd.nextInt(101) + 30); //角度変更処理
100
+
101
+ theta += Math.PI / (rnd.nextInt(101) + 30); //角度変更処理
102
+
103
+ pointY += distanceY; //落下処理
104
+
105
+
106
+
107
+ setRotPosition();
108
+
109
+ }
110
+
111
+ // Thread継承をやめたので、MainActivityでstartを呼んでいる箇所も削除
112
+
113
+ ```
114
+
115
+
116
+
117
+ こうすることでむやみにThreadを500個増やすようなことがなくなります。
118
+
119
+ これで動作が改善するか確かめてみてください。