Archive for March, 2012

WP 7.1.1 – Oficjalnie dostępne

Na stronach Microsoft jest dostępne do pobrania Windows Phone 7.1.1 Update (pisałem o wersji CTP tu).

Bezpośredni link: http://www.microsoft.com/download/en/details.aspx?id=29233

Co ciekawe nie ma konieczności odinstalowywania wersji CTP – co raczej rzadko się zdarzało w historii tej platformy :) Tak to wyglądało u mnie :)

Dla przypomnienia – dzięki 7.1.1 istnieje możliwość rozróżnienia urządzeń, które posiadają niższe parametry, dzięki czemu można dostosować ilość obliczeń / odświeżeń klatek dokonywanych w aplikacji do słabszych urządzeń. Dodatkowo istnieje możliwość wyboru emulatora (512 MB / 256 MB).

Ale to nie wszystko! SDK (a właściwie emulator) wreszcie działa bez problemu na Windows 8! DLa wszystkich, którzy wyposażyli się już w kafelki na “dużej” maszynie będzie to duży plus przy pracy z WP7 :)

Jeszcze kilka linków:

What’s new: http://msdn.microsoft.com/en-us/library/hh855084(v=vs.92).aspx

Tworzenie aplikacji na urządzenia 256MB http://msdn.microsoft.com/en-us/library/hh855081(v=vs.92).aspx


WP7 – Database tip

Jednym z najbardziej rozpowszechnionych błędów związanych z aplikacjami na WP7 korzystającymi z bazy danych jest błąd inicjowania tabel. Objawiał się on informacją o nieistniejących tabelach w momencie gdy przy tworzeniu bazy nie zostały do niej dodane żadne wpisy. Okazuje się, że po zainstalowaniu aktualizacji WP 7.1.1 błędu tego nie udało mi się już zreprodukować. Tak to jest, gdy posty zalegają w kolejce i nie zawsze jest czas, żeby na spokojnie je opisać :)

Niemniej jednak – jeżeli tworzymy bazę danych warto do niej dodać przykładowy wpis (najlepiej do dodatkowej, fakeowej tabeli). Dzięki temu silnik SQL CE poprawnie zainicjuje wszystkie tabele co pozwoli uniknąć problemu nieistniejących tabel. Dlaczego? Ponieważ nawet jeżeli błąd jest poprawiony w nowych uaktualnieniach, to nie mamy grawancji, że każdy użytkownik kożysta z najnowszej wersji systemu (dystrybucja uaktualnień u operatorów niestety różnie trwa, szczególnie w przypadku telefonów z USA brandowanych przez AT&A).

Inny problem, na który chciałbym zwrócić uwagę jest dużo bardziej prozaiczny. Chodzi o sposób eksponowania tabel w klasie kontekstu bazy danych. Przyzwyczajenie do właściwości (properties) okazuje się tu niestety zabójcze dla projektu.

Wyobraźmy sobie poniższy kod:

1
2
3
4
5
6
7
8
9
public class SampleDataContext : DataContext
{
	public SampleDataContext(string connectionString)
		: base(connectionString)
	{
	}
 
	public Table<SampleEntry> DataEntries { get; set; }
}

Okazuje się, że po jego uruchomieniu każda próba odwołania się do tabeli otrzymujemy błąd jak na poniższym screenie (Value can not be null):

Okazuje się, że w takim przypadku rozwiązanie zakrawa wręcz o banał, ponieważ wystarczy usunąć dodaną przez nas podświadomie deklarację gettera i settera czyli { get; set; } przy definicji tabeli – zamiast propercji powinna ona być zwykłym polem, o czym warto pamiętać, bo może wam to zaoszczędzić ładny kawałek czasu – w moim przypadku ta “pomyłka” kosztowała 3 godziny :)

 


Windows Phone SDK 7.1.1 Update CTP

W związku z premierą telefonu Nokia Lumia 610 na Mobile World Congress na stronach Microsoft Download pojawiła się wersja Windows Phone SDK 7.1.1 CTP. Wychodząc na przeciw rynkowi urządzeń mobilnych system Windows Phone szerzej zagości wśród urządzeń ze “słabszymi” parametrami (tańsze procesory i 256MB RAM). Aby zapewnić, że aplikacje będą przygotowane do płynnego działania również na takich urządzeniach nowe API udostępnia dostatkowe funkcjonalności. Od razu zaznaczę, że system jest na tyle zoptymalizowany, że nie ma tu najmniejszych problemów z wydajnością.

Do nowych funkcjonalności należą:

Dwa obrazy emulatora – tym razem przy testowaniu aplikacji mamy do dyspozycji emulator z pamięcią 512MB RAM (domyślny) oraz z 256MB RAM. Opcje te widać na liście wyboru emulatora:

 

 

 

Nowe API

Gdy chcemy rozpoznać na jakim urządzeniu pracujemy wystarczy wykorzystać poniższy kawałek kodu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
try
{
	Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
	if (result < 94371840L)
		// IsLowMemDevice = true;
	else
	{
		// IsLowMemDevice = false;
	}
}
catch (ArgumentOutOfRangeException)
{
	// Windows Phone OS update not installed, which indicates a 512-MB device. 
}

Warunek ten jest związany z faktem, że przy standardowej konfiguracji urządzenia działająca w tym momencie aplikacja ma do dyspozycji maksymalnie 90MB pamięci RAM. W przypadku urządzeń wyposażonych tylko w 256MB pamięci operacyjnej takie zużycie zagrażałoby stabilności pozostałych mechanizmów platformy. Warto już teraz zadbać o to, by nowi odbiory byli w stanie korzystać z naszych aplikacji i w razie konieczności np ograniczyć taktowanie zegara gry lub wykorzystywać mniej zasobochłonne operacje.

Więcej szczegółów na stronach MSDN.


  • O mnie

    Maciej Grabek

    Moje profile na:

    MVP

    Codeguru.pl GoldenLine
    Twitter CodeProject

  • english version
  • Polecam

  • Copyright © Maciej Grabek. All rights reserved.
    Powered by WordPress
    %d bloggers like this: