App arbeitet sehr langsam

  • Antworten:30
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 29

04.03.2014, 21:47:46 via Website

Hey Entwickler ;),

ich habe ein kleines Anfänger Problem meine App läuft immer ziemlich langsam, wenn ich einen Button drücke, der ein FrameLayout Visible setzt.
Warum wird die App dann so langsam?

Hier mal mein Code^^

1public class MainActivity extends Activity implements OnClickListener{
2
3 private Button shop;
4 private Button back;
5 private TextView tv1;
6 private TextView tv2;
7 private TextView tv3;
8 private FrameLayout Frame;
9 private ImageView click;
10 private int level1 = 1;
11 private int level2 = 1;
12 private int level3 = 1;
13 private double count;
14 private double countps;
15 private double zaehler1;
16 private double zaehler2;
17 private double zaehler3;
18
19
20 @Override
21 protected void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.activity_main);
24 click = (ImageView) findViewById(R.id.imageView1);
25 click.setOnClickListener(this);
26 Framesho = (FrameLayout) findViewById(R.id.Frame);
27 shop = (Button) findViewById(R.id.shop);
28 shop.setOnClickListener(this);
29 back = (Button) findViewById(R.id.back);
30 back.setOnClickListener(this);
31
32 tv1 = (TextView) findViewById(R.id.textView1);
33 tv2 = (TextView) findViewById(R.id.textView2);
34 tv3 = (TextView) findViewById(R.id.textView3);
35
36 LoadPreferences();
37 aktualisieren();
38 starteCount();
39 }
40
41
42
43 @Override
44 public void onClick(View v) {
45
46 if(v.getId() == R.id.tele) {
47
48 Frame.setVisibility(View.VISIBLE);
49
50 }
51
52 if(v.getId() == R.id.back) {
53
54
55 Frame.setVisibility(View.GONE);
56
57
58 }
59
60 if(v.getId() == R.id.imageView1) {
61
62 count = count + 1.0;
63 aktualisieren();
64
65 }
66
67 if(v.getId() == R.id.imageView2) {
68 if(count >= (int) Math.pow(1.2, level1)*2) {
69 count = count - (Math.pow(1.2, level1)*2);
70 zaehler1 = zaehler1 + Math.round(0.1*10)/10d;
71
72 level1 = level1 + 1;
73 aktualisieren();
74 }
75 }
76
77 if(v.getId() == R.id.imageView3) {
78 if(count >= Math.pow(1.2, level2)*10) {
79 count = count - Math.pow(1.2, level2)*10;
80 zaehler2 = zaehler2 + 0.5;
81 level2 = level2 + 1;
82 aktualisieren();
83 }
84 }
85
86 if(v.getId() == R.id.imageView4) {
87 if(count >= Math.pow(1.2, level3)*50) {
88 count = count - Math.pow(1.2, level3)*50;
89
90 zaehler3 = zaehler3 + 5.0;
91 level3 = level3 + 1;
92 aktualisieren();
93
94 }
95 }
96 round();
97 countps = zaehler1 + zaehler2 + zaehler3;
98 countps = Math.round(countps*10)/10d;
99 aktualisieren();
100 round();
101 }
102
103private void starteCount()
104{
105 new Thread(new Runnable() {
106 public void run(){
107
108 Count();
109
110
111 }
112}).start();
113
114}
115private void Count() {
116 Timer timer = new Timer();
117 TimerTask task = new TimerTask() {
118 public void run(){
119 MainActivity.this.runOnUiThread(new Runnable() {
120 public void run() {
121
122
123 count = count + countps;
124 round();
125 aktualisieren();
126
127
128
129 }
130 });
131 }
132 };
133
134 timer.schedule(task, 0, 1000);
135
136 }
137public void round(){
138 count = Math.round(count * 10)/10d;
139}
140
141
142 public void aktualisieren(){
143 TextView countps = (TextView) findViewById(R.id.countps);
144 countps.setText(Double.toString(countps) + " countps");
145 TextView Count = (TextView) findViewById(R.id.Count);
146 Count.setText(Double.toString(count) + " Count");
147 writeSavedPreferences();
148
149 tv1.setText(Integer.toString( (int) ( Math.pow(1.2, level1)*2)));
150 tv2.setText(Integer.toString( (int) ( Math.pow(1.2, level2)*10)));
151 tv3.setText(Integer.toString( (int) ( Math.pow(1.2, level3)*50)));
152
153 }
154
155 private void writeSavedPreferences() {
156 SharedPreferences settings = getSharedPreferences("GAME", 0);
157 SharedPreferences.Editor editor = settings.edit();
158
159 editor.putInt("Level1", level1);
160 editor.putInt("Level2", level2);
161 editor.putInt("Level3", level3);
162 editor.putString("countps", countps + "");
163 editor.putString("count", count + "");
164 editor.putString("zaehler1", zaehler1 + "");
165 editor.putString("zaehler2", zaehler2 + "");
166 editor.putString("zaehler3", zaehler3 + "");
167 editor.commit();
168
169
170 }
171
172 private void LoadPreferences() {
173 SharedPreferences pref = getSharedPreferences("GAME", 0);
174
175
176 level1 = pref.getInt("Level1", level1);
177 level2 = pref.getInt("Level2", level2);
178 level3 = pref.getInt("Level3", level3);
179 countps = Double.parseDouble(pref.getString("countps", countps + "")) ;
180 count = Double.parseDouble(pref.getString("count", count + ""));
181 zaehler1 = Double.parseDouble(pref.getString("zaehler1", zaehler1 + ""));
182 zaehler2 = Double.parseDouble(pref.getString("zaehler2", zaehler2 + ""));
183 zaehler3 = Double.parseDouble(pref.getString("zaehler3", zaehler3 + ""));
184 }
185 }

— geändert am 05.03.2014, 16:26:54

Antworten
  • Forum-Beiträge: 1.525

04.03.2014, 22:16:03 via Website

Hallo.

Testet du deine App auf dem Phone oder Emulator?
Wenn auf dem Phone, welches hast du?


LG

Antworten
  • Forum-Beiträge: 29

04.03.2014, 22:33:33 via Website

Hey

Ich teste übers Smartphone (Huawei Ascemd P6). Alsso vorher hatte ich nie Probleme. Das passiert immer erst wenn ich das Layout visible mache, wenn es wiedergone ist läuft die App wieder flüssig.


Danke schonmal für die schnelle Antwort :)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

04.03.2014, 22:34:57 via Website

Wieviel Ram und Speicherplatz brauch die App?
Ist das Layout so kompliziert?
poste es bittte mal.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 1.525

04.03.2014, 22:37:04 via Website

Was soll denn deine App bewirken, wenn ich fragen darf.

Vielleicht kann man es anders dann machen das es nicht mehr hängt/langsam ist.


LG

Antworten
  • Forum-Beiträge: 29

05.03.2014, 16:26:38 via Website

Pascal P.
Wieviel Ram und Speicherplatz brauch die App?
Ist das Layout so kompliziert?
poste es bittte mal.

1<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:gravity="top"
6 android:paddingBottom="@dimen/activity_vertical_margin"
7 android:paddingLeft="@dimen/activity_horizontal_margin"
8 android:paddingRight="@dimen/activity_horizontal_margin"
9 android:paddingTop="@dimen/activity_vertical_margin"
10 tools:context=".MainActivity" >
11
12 <LinearLayout
13 android:id="@+id/linearLayout1"
14 android:layout_width="wrap_content"
15 android:layout_height="wrap_content"
16 android:layout_alignParentRight="true"
17 android:layout_alignParentTop="true" >
18
19 <Button
20 android:id="@+id/button4"
21 android:layout_width="29dp"
22 android:layout_height="203dp"
23 android:text="Button" />
24
25 <Button
26 android:id="@+id/button3"
27 android:layout_width="29dp"
28 android:layout_height="203dp"
29 android:text="Button" />
30
31 <Button
32 android:id="@+id/button2"
33 android:layout_width="29dp"
34 android:layout_height="205dp"
35 android:text="Button" />
36 </LinearLayout>
37
38 <TextView
39 android:id="@+id/CPS"
40 android:layout_width="wrap_content"
41 android:layout_height="wrap_content"
42 android:layout_alignBaseline="@+id/Count"
43 android:layout_alignBottom="@+id/Count"
44 android:text="@string/backgroundLayout" />
45
46 <TextView
47 android:id="@+id/Count"
48 android:layout_width="wrap_content"
49 android:layout_height="wrap_content"
50 android:layout_below="@+id/linearLayout1"
51 android:layout_marginLeft="56dp"
52 android:layout_marginTop="114dp"
53 android:layout_toRightOf="@+id/CPS"
54 android:text="@string/backgroundLayout" />
55
56 <ImageView
57 android:id="@+id/imageView1"
58 android:layout_width="200dp"
59 android:layout_height="205dp"
60 android:layout_alignParentLeft="true"
61 android:layout_alignTop="@+id/linearLayout1"
62 android:layout_marginTop="20dp"
63 android:src="@drawable/klunbe" />
64
65 <Button
66 android:id="@+id/shop"
67 android:layout_width="wrap_content"
68 android:layout_height="wrap_content"
69 android:layout_alignParentBottom="true"
70 android:layout_centerHorizontal="true"
71 android:layout_marginBottom="28dp"
72 android:text="@string/buttt" />
73
74 <FrameLayout
75 android:id="@+id/Frame"
76 android:layout_width="wrap_content"
77 android:layout_height="wrap_content"
78 android:layout_alignLeft="@+id/CPS"
79 android:layout_alignParentBottom="true"
80 android:layout_alignParentRight="true"
81 android:layout_alignTop="@+id/linearLayout1"
82 android:visibility="gone" >
83
84 <LinearLayout
85 android:layout_width="match_parent"
86 android:layout_height="match_parent"
87 android:orientation="vertical" >
88
89 <RelativeLayout
90 android:layout_width="wrap_content"
91 android:layout_height="156dp" >
92
93 <ImageView
94 android:id="@+id/imageView3"
95 android:layout_width="wrap_content"
96 android:layout_height="wrap_content"
97 android:layout_alignParentBottom="true"
98 android:src="@drawable/unbeka" />
99
100 <TextView
101 android:id="@+id/textView1"
102 android:layout_width="wrap_content"
103 android:layout_height="wrap_content"
104 android:layout_alignParentLeft="true"
105 android:layout_centerVertical="true"
106 android:layout_marginLeft="34dp"
107 android:text="TextView"
108 android:textColor="#0000ff" />
109
110 </RelativeLayout>
111
112 <RelativeLayout
113 android:layout_width="wrap_content"
114 android:layout_height="159dp" >
115
116 <ImageView
117 android:id="@+id/imageView2"
118 android:layout_width="wrap_content"
119 android:layout_height="wrap_content"
120 android:layout_alignParentBottom="true"
121 android:src="@drawable/unbeka" />
122
123 <TextView
124 android:id="@+id/textView2"
125 android:layout_width="wrap_content"
126 android:layout_height="wrap_content"
127 android:layout_alignParentLeft="true"
128 android:layout_centerVertical="true"
129 android:layout_marginLeft="37dp"
130 android:text="TextView"
131 android:textColor="#0000ff" />
132
133 </RelativeLayout>
134
135 <RelativeLayout
136 android:layout_width="match_parent"
137 android:layout_height="wrap_content"
138 android:layout_weight="0.56" >
139 <ImageView
140 android:id="@+id/imageView4"
141 android:layout_width="wrap_content"
142 android:layout_height="wrap_content"
143 android:src="@drawable/unbeka" />
144 <TextView
145 android:id="@+id/textView3"
146 android:layout_width="wrap_content"
147 android:layout_height="wrap_content"
148 android:layout_alignParentLeft="true"
149 android:layout_centerVertical="true"
150 android:layout_marginLeft="32dp"
151 android:text="TextView"
152 android:textColor="#0000ff" />
153 </RelativeLayout>
154 <Button
155 android:id="@+id/back"
156 android:layout_width="wrap_content"
157 android:layout_height="wrap_content"
158 android:layout_marginLeft="72dp"
159 android:text="@string/back" />
160 </LinearLayout>
161 </FrameLayout>
162</RelativeLayout>

und joa also das Problem tritt erst auf, seitdem ich das Framelayout eingebaut habe bzw. dieses Visible bzw. Gone gestellt habe. Gibt es eine bessere Lösung, damit sozusagen auf dem alten Layout ein neues geöffnet wird?

bzw. es ist ja doch schon ziemlich lang gibt es eine Möglichkeit, dass noch zu minimieren?

— geändert am 05.03.2014, 16:27:59

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

05.03.2014, 16:43:06 via Website

Da hab ich keine Ahnung.
Für was brauchst du denn das FrameLayout?
Und wie bindest du es ein, vlt liegt da ja der Fehler

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 1.525

05.03.2014, 16:45:49 via Website

Nimm doch:
android:visibility="gone"
raus und mach es im Code?
Und dann nehme doch lieber "invisible" anstatt "gone".


LG

Antworten
  • Forum-Beiträge: 29

05.03.2014, 17:31:29 via Website

Hmmm hilf auch nicht.

Liegt das dadran, dass ich im Hintergrund bzw. im anderen Layout, das unter dem Framelayout liegt, noch Buttons mit Onclick habe? Also,dass die irgendwie kollidieren, weil ja ein Bild darüber liegt.

— geändert am 05.03.2014, 17:47:06

Antworten
  • Forum-Beiträge: 1.525

05.03.2014, 18:29:17 via Website

Du hast mir ja auch noch immer nicht meine frage beantwortet.
Was genau deine App bewirken soll.

Vielleicht geht das alles viel leichter und anders.


LG

Antworten
  • Forum-Beiträge: 29

05.03.2014, 19:06:31 via Website

Oh das hab ich überlesen :cold:

Also ich will eine App machen, die einen Count hat, der sich jede Sekunde um 1 erhöht. Mit diesen Counts soll man sich etwas kaufen können upgrades oder ähnliches. Diesen Upgrade-Shop habe ich versucht mit diesem FrameLayout darzustellen, nur im Hintergrund soll weitergezählt werden. Joa das war es erstmal grob.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

05.03.2014, 19:15:28 via Website

Tut es auch, wenn du das hochzählen in einen Thread verlegst und den Shop in eine Art PopUp ( so etwas: http://androidresearch.wordpress.com/2012/05/06/how-to-create-popups-in-android/ ) packst.
Somit läuft das Zählen im Hintergrund Weiter und du kannst den Shop in ruhe benutzen. Bei diesem Verfahren musst du aber darauf achten, dass die Zähler variablen zum Zeitpunkt des Abrufs synchron mit den Thread ist.

— geändert am 05.03.2014, 19:15:41

LG Pascal //It's not a bug, it's a feature. :) ;)

Evoh

Antworten
  • Forum-Beiträge: 29

05.03.2014, 19:45:44 via Website

AH okay PopUp ;) hatte das vorher auch schon in einer xml wusste aber nicht wie ich das da machen sollte, aber ich versuch es mal so.

und den Thread hab ich ja bereits eingebaut.

Antworten
  • Forum-Beiträge: 1.525

05.03.2014, 19:59:03 via Website

Hat Pascal P. gut erklärt.

Würde ich auch so machen.
Versuch es mal so.
Ansonsten fragste nochmal, wenn was nicht klappt.


LG

Antworten
  • Forum-Beiträge: 76

05.03.2014, 20:15:00 via App

Versuche so wenig views wie möglich zu verwenden (besonders bei Verwendung von layout_weight.Bei einer erweiterten Hierarchie wird das sehr performancelastig). Wenn du das Layout auf visible setzt, dann wird die komplette layout Hierarchie durchlaufen.
Durch den Aufruf von runOnUiThread im TimerTask läuft die komplette Berechnung im Ui Thread ab, also jede Sekunde. Ich glaube wenn du das layout einfach weniger komplex gestaltest dann sollte es mehr oder weniger normal laufen

Antworten
  • Forum-Beiträge: 29

06.03.2014, 16:15:45 via Website

Okay das mit dem Popup Fenster sieht jetzt schonmal sehr gut aus ;) , aber auch das PopUp -Fenster öffnet sich ziemlich langsam :(

Ich habe jetzt herausgefunden, dass es an den Bilder liegt, die ich in das ImageView gepackt habe. Gibt es dort bestimmte vorgaben, wie groß das Bild und auch die MB/KB größe seindarf?



Kann mir jmd sagen, wie ich das PopUp Fenster je nach Handy bzw. Auflösung wählen kann? Ist das überhaupt mit einem Pop Up möglich, weil das wäre dann ja diese Zeile:
1popupwindo = new PopupWindow(layout, 600, 900, true);
2popupwindo.showAtLocation(layout, Gravity.CENTER, 0, 50);

— geändert am 06.03.2014, 16:37:38

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

06.03.2014, 16:30:22 via Website

Dort giebst du einfach nur die Grüße des PopUps an, wenn es Fullscreen sein soll, dann musst du noch die Display Szize preüfen.
Sonst kannst du auch den Größen wert errechen, da er ja variabel sein muss.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 29

06.03.2014, 21:39:10 via Website

Hey...

danke jetzt funktioniert es so wie ich es will :)

Aber da hab ich gleich wieder eine neue Frage >.<

Ist es möglich den Thread bzw. die App anzuhalen, sodass nicht weitergezählt wird, wenn die App "minimiert" oder der Bildschirm schwarz wird?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

06.03.2014, 21:42:47 via Website

Jo, du musst dir eine art dafür überlegen, und dann den thrad beenden und den counter speichern. Thread neustarten und dann weiterzählen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 29

06.03.2014, 22:10:43 via Website

hmmm kann man diese Beiden zustände irgendwie abfragen oder ähnliches?

Antworten

Empfohlene Artikel