java – 为什么我的android应用程序这么慢?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 为什么我的android应用程序这么慢?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4630字,纯文字阅读大概需要7分钟。
内容图文
![java – 为什么我的android应用程序这么慢?](/upload/InfoBanner/zyjiaocheng/731/0b8f9b095b0d46338fe5095d083a4fc6.jpg)
我一直在关注this教程.我一直在玩代码,解决我不需要的东西和添加东西等等,但是当我在模拟器中运行它时,块会以非常恶劣的动作移动.这就像我得到一个低FPS.在运行应用程序的第一秒左右,它会顺利运行,然后在我关闭之前重新编译它时会再次运行大约一秒钟.知道如何让它一直运行顺畅吗?
MainActivity.java
package com.example.mobilecoursework;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new Blocks(this));
}
}
blocks.java
package com.example.mobilecoursework;
import java.util.ArrayList;
import java.util.Random;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
class Blocks extends SurfaceView implements SurfaceHolder.Callback {
//
private BlockThread _thread;
//declare an array of the block sprites
private ArrayList<GraphicObject> _graphics = new ArrayList<GraphicObject>();
public Blocks(Context context) {
super(context);
getHolder().addCallback(this);
_thread = new BlockThread(getHolder(), this);
setFocusable(true);
}
public void DrawBlocks(){
for (int i=0; i < 20; i++)
{
//create new random x and y position values
Random randX = new Random();
int i1=randX.nextInt(getWidth()-0) + 0;
Random randY = new Random();
int i2=randY.nextInt(getHeight()-0) + 0;
GraphicObject graphic = new GraphicObject(BitmapFactory.decodeResource(getResources(), R.drawable.block));
graphic.getCoordinates().setX((int) i1 - graphic.getGraphic().getWidth() / 2);
graphic.getCoordinates().setY((int) i2 - graphic.getGraphic().getWidth() / 2);
_graphics.add(graphic);
}
}
public void updatePhysics() {
GraphicObject.Coordinates coord;
for (GraphicObject graphic : _graphics) {
//move blocks down
coord = graphic.getCoordinates();
coord.setY(coord.getY() + 5 );
// reset block
if (coord.getY() + graphic.getGraphic().getHeight() > getHeight()+10) {
coord.setY(-10);
}
}
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
Bitmap bitmap;
GraphicObject.Coordinates coords;
for (GraphicObject graphic : _graphics) {
bitmap = graphic.getGraphic();
coords = graphic.getCoordinates();
canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
_thread.setRunning(true);
_thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// simply copied from sample application LunarLander:
// we have to tell thread to shut down & wait for it to finish, or else
// it might touch the Surface after we return and explode
boolean retry = true;
_thread.setRunning(false);
while (retry) {
try {
_thread.join();
retry = false;
} catch (InterruptedException e) {
// we will try it again and again...
}
}
}
}
class BlockThread extends Thread {
private SurfaceHolder _surfaceHolder;
private Blocks _Blocks;
private boolean _run = false;
public BlockThread(SurfaceHolder surfaceHolder, Blocks blocks) {
_surfaceHolder = surfaceHolder;
_Blocks = blocks;
}
public void setRunning(boolean run) {
_run = run;
}
public SurfaceHolder getSurfaceHolder() {
return _surfaceHolder;
}
@Override
public void run() {
Canvas c;
_Blocks.DrawBlocks();
while (_run) {
c = null;
try {
c = _surfaceHolder.lockCanvas(null);
synchronized (_surfaceHolder) {
_Blocks.updatePhysics();
_Blocks.onDraw(c);
}
} finally {
// do this in a finally so that if an exception is thrown
// during the above, we don't leave the Surface in an
// inconsistent state
if (c != null) {
_surfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
}
class GraphicObject {
//
// Contains the coordinates of the graphic.
//
public class Coordinates {
private int _x = 100;
private int _y = 0;
public int getX() {
return _x + _bitmap.getWidth() / 2;
}
public void setX(int value) {
_x = value - _bitmap.getWidth() / 2;
}
public int getY() {
return _y + _bitmap.getHeight() / 2;
}
public void setY(int value) {
_y = value - _bitmap.getHeight() / 2;
}
public String toString() {
return "Coordinates: (" + _x + "/" + _y + ")";
}
}
private Bitmap _bitmap;
private Coordinates _coordinates;
public GraphicObject(Bitmap bitmap) {
_bitmap = bitmap;
_coordinates = new Coordinates();
}
public Bitmap getGraphic() {
return _bitmap;
}
public Coordinates getCoordinates() {
return _coordinates;
}
}
解决方法:
模拟器非常慢,可能是导致问题的原因.什么都没有跳出你的代码,所以在你撕掉你的头发试图让它更顺畅之前在真实的设备上尝试.
内容总结
以上是互联网集市为您收集整理的java – 为什么我的android应用程序这么慢?全部内容,希望文章能够帮你解决java – 为什么我的android应用程序这么慢?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。