Я только начал изучать живые обои и сделал эту штучку.
дело в том, что мое приложение компилируется без проблем.
когда я открываю его в телефоне, он показывает обои в предварительном просмотре, но когда я нажимаю «установить как обои», он почему-то вылетает и возвращает передний экран, а мои обои становятся черными, но он не запускает их.
я предполагаю, что проблема где-то в onDestory() ..
public class Strips extends WallpaperService {
private StripsEngine engine;
@Override
public void onCreate() {
super.onCreate();
engine = new StripsEngine();
engine.resume();
}
@Override
public void onDestroy() {
super.onDestroy();
engine.pause();
}
@Override
public Engine onCreateEngine() {
return engine;
}
class StripsEngine extends Engine implements Runnable {
private Thread t = null;
private SurfaceHolder holder;
private boolean clearToRun = false;
private Paint paint = new Paint();
private Paint paint2 = new Paint();
private int frame;
private float endX,endY;
private int height, width;
private Canvas c;
StripsEngine() {
holder = getSurfaceHolder();
paint.setColor(Color.WHITE);
paint.setStrokeWidth(30);
paint.setAntiAlias(true);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStyle(Paint.Style.STROKE);
paint2 = paint;
paint2.setColor(Color.BLACK);
paint2.setStrokeWidth(40);
frame = 0;
}
void drawStrips() {
}
public void run() {
// TODO Auto-generated method stub
while (clearToRun) {
if (!holder.getSurface().isValid()) {
continue;
}
height = 800;
width = 480;
endX = (frame) % (width + 10);
endY = (frame / 3) % (height + 10);
if (endX == 0)
paint.setARGB(255,(int)(Math.random()*255), (int)(Math.random()*255),(int)(Math.random()*255));
if (endY ==0)
paint.setARGB(255,(int)(Math.random()*255), (int)(Math.random()*255),(int)(Math.random()*255));
c = holder.lockCanvas();
c.drawLine(endX-30, endY-10, endX , endY,paint);
c.drawLine(endX-30, endY-10, endX , endY,paint);
holder.unlockCanvasAndPost(c);
frame = frame +2;
}
}
public void pause() {
clearToRun = false;
while (true) {
try {
t.join();
}
catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
t = null;
}
public void resume() {
clearToRun = true;
t = new Thread(this);
t.start();
}
}
}
07-06 17:14:43.869: E/Surface(478): ошибка при удалении буфера из очереди (Неизвестная ошибка: -19) 07-06 17:14:43.869: E/Surface(478): ошибка dequeueBuffer (нет такого устройства) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): поверхность блокировки исключения 07-06 17:14:43.869: E/BaseSurfaceHolder(478): java.lang.IllegalArgumentException 07-06 17:14:43.869: E /BaseSurfaceHolder(478): в android.view.Surface.lockCanvasNative(собственный метод) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): в android.view.Surface.lockCanvas(Surface.java:288) 07 -06 17:14:43.869: E/BaseSurfaceHolder(478): в com.android.internal.view.BaseSurfaceHolder.internalLockCanvas(BaseSurfaceHolder.java:132) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): в com.android.internal.view.BaseSurfaceHolder.lockCanvas(BaseSurfaceHolder.java:112) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): в com.mendel.strips.Strips$StripsEngine.run(Strips. java:81) 07-06 17:14:43.869: E/BaseSurfaceHolder(478): в java.lang.Thread.run(Thread.java :1096) 07-06 17:14:43.972: W/dalvikvm(478): threadid=15: поток завершается с необработанным исключением (группа=0x4001b188) 07-06 17:14:43.979: E/AndroidRuntime(478): неперехваченный обработчик: поток Thread-8 завершается из-за необработанного исключения 07-06 17:14:43.990: E/AndroidRuntime(478): java.lang.NullPointerException 07-06 17:14:43.990: E/AndroidRuntime(478): at com .mendel.strips.Strips$StripsEngine.run(Strips.java:82) 07-06 17:14:43.990: E/AndroidRuntime(478): в java.lang.Thread.run(Thread.java:1096) 07- 06 17:14:43.999: I/dalvikvm(478): threadid=7: реакция на сигнал 3 07-06 17:14:43.999: E/dalvikvm(478): невозможно открыть файл трассировки стека '/data/anr/ traces.txt': Отказано в доступе