После того, как вы вернулись с камеры, вам нужно stopPreview()
и release()
, чтобы другое приложение могло получить к нему доступ. Сделайте класс «Камера» статичным и назовите его как null
в onPause()
. Это разрешает мою проблему.
Попробуйте:
public class CameraPhotoCapture extends Activity{
static Camera mcamera = null;
@Override
protected void onPause() {
// TODO Auto-generated method stub
if (mcamera != null) {
mcamera.stopPreview();
mcamera.release();
mcamera = null;
Log.d(DEBUG_TAG, "releaseCamera -- done");
}
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
if (mcamera != null) {
Camera.open();
Log.d(DEBUG_TAG, "openCamera -- done");
}
super.onResume();
}
}
Konrad: Таким образом, как Вы используете его? Скажем, я хочу соответствовать mo. Идентификатор к magicNumber.
В C# 2.0 Вы записали бы:
result = mObjList.Find(delegate(int x) { return x.ID == magicNumber; });
3.0 знает лямбды:
result = mObjList.Find(x => x.ID == magicNumber);
Использование Лямбда-выражения:
List<MyObject> list = new List<MyObject>();
// populate the list with objects..
return list.Find(o => o.Id == myCriteria);
Поместите код в метод, и Вы сохраняете временный файл и a break
(и Вы перерабатываете код, в качестве награды):
T Find<T>(IEnumerable<T> items, Predicate<T> p) {
foreach (T item in items)
if (p(item))
return item;
return null;
}
…, но конечно этот метод уже существует так или иначе для Списков, даже в.NET 2.0.
Очевидно хит производительности анонимных делегатов является довольно значительным.
Тестовый код:
static void Main(string[] args)
{
for (int kk = 0; kk < 10; kk++)
{
List<int> tmp = new List<int>();
for (int i = 0; i < 100; i++)
tmp.Add(i);
int sum = 0;
long start = DateTime.Now.Ticks;
for (int i = 0; i < 1000000; i++)
sum += tmp.Find(delegate(int x) { return x == 3; });
Console.WriteLine("Anonymous delegates: " + (DateTime.Now.Ticks - start));
start = DateTime.Now.Ticks;
sum = 0;
for (int i = 0; i < 1000000; i++)
{
int match = 0;
for (int j = 0; j < tmp.Count; j++)
{
if (tmp[j] == 3)
{
match = tmp[j];
break;
}
}
sum += match;
}
Console.WriteLine("Classic C++ Style: " + (DateTime.Now.Ticks - start));
Console.WriteLine();
}
}
Результаты:
Anonymous delegates: 710000
Classic C++ Style: 340000
Anonymous delegates: 630000
Classic C++ Style: 320000
Anonymous delegates: 630000
Classic C++ Style: 330000
Anonymous delegates: 630000
Classic C++ Style: 320000
Anonymous delegates: 610000
Classic C++ Style: 340000
Anonymous delegates: 630000
Classic C++ Style: 330000
Anonymous delegates: 650000
Classic C++ Style: 330000
Anonymous delegates: 620000
Classic C++ Style: 330000
Anonymous delegates: 620000
Classic C++ Style: 340000
Anonymous delegates: 620000
Classic C++ Style: 400000
В каждом случае использование анонимных делегатов приблизительно на 100% медленнее, чем другой путь.