回答編集履歴

1

追記

2016/06/10 03:04

投稿

masaya_ohashi
test CHANGED
@@ -11,109 +11,3 @@
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
- これで動作が改善するか確かめてみてください。