Заметил я это поставив один из параметров отрисовки в зависимости от времени, иначе у процессов форкнутых все идентично и заметить что одну и ту же картинку отрисовывает на самом деле сотни или тысячи процессов невозможно.
Заодно подивился мощности современной техники - система как сумашедшая запускает неимоверное количество процессов одновременно, но этой малюсенькому карманному компбютерку все ни по чем!
Вот программка, которая демонстрирует ошибку - весь экран заполняется постоянно перерисующимися картинками, то есть каждвя картинка перерисовавается, если бы не было бесконтрольной репликвции перерисовывалась бы только одна картинка:
----------------------------------------------------------------------
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.livecubes">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.livecubes">
<uses-sdk android:minSdkVersion="7"/>
<uses-feature android:name="android.software.live_wallpaper"/>
</manifest>
----------------------------------------------------------------------------------------------------------
package com.example.android.livecubes.cube1;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
import android.os.SystemClock;
import android.service.wallpaper.WallpaperService;
import android.view.SurfaceHolder;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
public class CubeWallpaper1 extends WallpaperService {
private final Handler mHandler = new Handler();
@Override
public void onCreate() {
super.onCreate();
heroPictures();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public Engine onCreateEngine() {
return new WPEngine();
}
class WPEngine extends Engine implements Runnable{
private final Paint paint = new Paint();
private int wpWidth;
private int wpHeight;
int XXX = 0;
int YYY = 0;
public void run() {
mHandler.removeCallbacks(this);
mHandler.postDelayed(this, 10);
drawFrame();
XXX = ( XXX + 11 ) % 470;
YYY = ( YYY + 7 ) % 900;
}
private boolean mVisible;
WPEngine() {
mHandler.postDelayed(this, 10);
}
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);
}
@Override
public void onDestroy() {
super.onDestroy();
mHandler.removeCallbacks(this);
}
@Override
public void onVisibilityChanged(boolean visible) {
try{
mVisible = visible;
if (visible) {
drawFrame();
}
} catch (Exception e) {
}
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
super.onSurfaceChanged(holder, format, width, height);
wpWidth = width;
wpHeight = height;
drawFrame();
}
@Override
public void onSurfaceCreated(SurfaceHolder holder) {
super.onSurfaceCreated(holder);
drawFrame();
}
@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
super.onSurfaceDestroyed(holder);
mVisible = false;
}
@Override
public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) {
drawFrame();
}
void drawFrame( ) {
final SurfaceHolder holder = getSurfaceHolder();
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
if (canvas != null) {
canvas.drawBitmap(bublickBitmap, XXX, 60 + YYY, paint);
}
} finally {
if (canvas != null) holder.unlockCanvasAndPost(canvas);
}
}
}
Bitmap bublickBitmap;
void heroPictures() {
bublickBitmap = BitmapFactory.decodeResource(getResources(), com.example.android.livecubes.R.drawable.bublick);
}
}
No comments:
Post a Comment