В некоторой степени генераторы случайных чисел являются лошадями для курсов. Случайный класс реализует LCG с обоснованно выбранными параметрами. Но это все еще показывает следующие функции:
, Если эти вещи не будут иметь значения для Вас, то Случайный имеет плюс того, чтобы быть обеспеченным как часть JDK. Это достаточно хорошо для вещей как случайные игры (но не, где деньги включены). Нет никаких слабых семян как таковых.
Другая альтернатива, которая является генератор XORShift , который может быть реализован в Java следующим образом:
public long randomLong() {
x ^= (x << 21);
x ^= (x >>> 35);
x ^= (x << 4);
return x;
}
Для некоторых очень дешевых операций, это имеет период 2^64-1 (нуль не разрешен), и достаточно просто быть встроенным, когда Вы генерация значения неоднократно. Различные значения сдвига возможны: см. статью George Marsaglia о Генераторах XORShift для получения дополнительной информации. Можно считать биты в числах сгенерированными как являющийся одинаково случайным. Одна основная слабость - то, что иногда это будет входить в "колею", где не много битов установлены в числе, и затем требуется несколько поколений для выхода из этой колеи.
Другие возможности:
я сказал бы, избегают генераторов, которые используют глупый объем памяти, чтобы дать Вам период дольше, чем Вам действительно нужно (у некоторых есть период, больше, чем количество атомов во вселенной - Вам действительно обычно не нужно это). И обратите внимание, что "длительный период" не обязательно означает "высококачественный генератор" (хотя 2^48 является все еще немного низким!).
Чтобы добавить / изменить / удалить значок уведомления, мы можем использовать класс ApplicationIndicator :
Представляет индикатор приложения, состоящий из значка и необязательного числового значение.
Значок помещается в область индикаторов вместе с другими, такими как счетчик новой почты, напоминания календаря, счетчик пропущенных вызовов, состояние безопасности и другие.
EncodedImage mImage = EncodedImage.getEncodedImageResource("indicator_icon.png");
ApplicationIcon mIcon = new ApplicationIcon(mImage);
Затем мы должны зарегистрировать ApplicationIndicator в ApplicationIndicatorRegistry :
ApplicationIndicatorRegistry.register ( icon , iconOnly , видимым ) ] icon - значок, который будет отображаться в области индикаторов.
iconOnly - указывает, должен ли индикатор иметь только представление значка, а не значение
видимое - указывает, должен ли индикатор быть изначально видимым
ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator indicator = reg.register(mIcon, false, true);
Чтобы изменить значок, используйте метод ApplicationIndicator.setIcon :
ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator appIndicator = reg.getApplicationIndicator();
appIndicator.setIcon(icon);
Чтобы изменить числовое значение, используйте метод ApplicationIndicator.setValue :
ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator appIndicator = reg.getApplicationIndicator();
appIndicator.setValue(value);
Чтобы скрыть или показать индикатор, используйте ApplicationIndicator.setVisible
Скорее всего, вы не хотите, чтобы индикатор вашего приложения оставался в строке состояния, лучше ApplicationIndicatorRegistry.unregister () это при закрытии приложения.
Значки:
удалены мертвые ссылки ImageShack
Снимки экрана:
удалены мертвые ссылки ImageShack
Код:
import net.rim.blackberry.api.messagelist.ApplicationIcon;
import net.rim.blackberry.api.messagelist.ApplicationIndicator;
import net.rim.blackberry.api.messagelist.ApplicationIndicatorRegistry;
import net.rim.device.api.system.EncodedImage;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.container.MainScreen;
class Scr extends MainScreen {
EncodedImage mImageGreen = EncodedImage
.getEncodedImageResource("bb_icon_green.png");
ApplicationIcon mIconGreen = new ApplicationIcon(mImageGreen);
EncodedImage mImageRed = EncodedImage
.getEncodedImageResource("bb_icon_red.png");
ApplicationIcon mIconRed = new ApplicationIcon(mImageRed);
ApplicationIcon mIcon = mIconGreen;
public Scr() {
add(new LabelField("Use menu to:"));
add(new LabelField("Register indicator"));
add(new LabelField("Increment value"));
add(new LabelField("Decrement value"));
add(new LabelField("Switch icon"));
add(new LabelField("Unregister indicator"));
}
MenuItem menuRegister = new MenuItem("register", 0, 0) {
public void run() {
registerIndicator();
};
};
protected int mValue = 0;
MenuItem menuIncrement = new MenuItem("increment", 0, 0) {
public void run() {
mValue++;
updateValue(mValue);
};
};
MenuItem menuDecrement = new MenuItem("decrement", 0, 0) {
public void run() {
mValue--;
updateValue(mValue);
};
};
MenuItem menuSwitchIcon = new MenuItem("icon", 0, 0) {
public void run() {
mIcon = (mIcon == mIconGreen) ? mIconRed : mIconGreen;
updateIcon(mIcon);
};
};
MenuItem menuUnregister = new MenuItem("unregister", 0, 0) {
public void run() {
unregisterIndicator();
};
};
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
menu.add(menuRegister);
menu.add(menuIncrement);
menu.add(menuDecrement);
menu.add(menuSwitchIcon);
menu.add(menuUnregister);
}
private void registerIndicator() {
try {
ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry
.getInstance();
ApplicationIndicator indicator =
reg.register(mIcon, false, true);
} catch (Exception e) {
}
}
private void unregisterIndicator() {
try {
ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry
.getInstance();
reg.unregister();
} catch (Exception e) {
}
}
void updateValue(int value) {
try {
ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry
.getInstance();
ApplicationIndicator appIndicator =
reg.getApplicationIndicator();
appIndicator.setValue(value);
} catch (Exception e) {
}
}
void updateIcon(ApplicationIcon icon) {
try {
ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry
.getInstance();
ApplicationIndicator appIndicator =
reg.getApplicationIndicator();
appIndicator.setIcon(icon);
} catch (Exception e) {
}
}
}