• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Arka plan Görevleri

Bu makalemde birlikte Windows 8 metro stil uygulamalar için arka plan görevlerine giriş yapacağız

09.09.2012

Yazar: Fatih Boy (Google+)

Kategori: Windows 8

4033

   Windows 8’de geliştirdiğiniz uygulamaların yaşam döngüsünü bir önceki makalemde sizlerle paylaşmıştım. Uygulamaların yaşam döngüsü hakkında detaylı bilgi edindikten sonra eminim ki masaüstü uygulamalarıyla karşılaştırmışsınızdır. İlk aklınıza gelecek soru eminim ki gerçekleştirdiğiniz düzenli/uzun soluklu işlerde kullanıcının bir başka uygulamayı aktif hale getirdiğinde ne olacağıdır. En basitinden bir e-mail uygulaması yazdığınızı düşünün, bu uygulama kullanıcı tarafından aktif edilmesi bile mailleri kontrol ederek kullanıcıyı bilgilendirmelidir. Bir başka örnek facebook ya da twitter gibi sosyal ortamlardan gelen mesajların düzenli olarak kontrol edilerek size iletilmesi olabilir. Bu makalemde Windows 8 uygulamalarınızda arka plan işlemlerini nasıl gerçekleştirebileceğinizi sizlerle paylaşacağım.

   Öncelikle, Windows 8 ile birlikte Microsoft’un düşük güç kullanımına çok önem verdiğini fark etmişsinizdir. Windows 8’in bu işlemci zamanı ve hafıza kullanımındaki cimriliği sayesinde mobil sistemlerde daha uzun bir pil ömrüne sahip olabiliyoruz. Üstelik bu cimriliğin tek getirisi sadece uzun pil ömrü de değil… Giderek incelen mobil sistemler henüz bir masaüstü sistem kadar güçlü bir işlemci mimarisine sahip değil, dolayısıyla masaüstü bir sistemden beklediğimiz çoklu görev ve arka plan işlemlerinin aynı anda ve aynı performansla mobil sistemlerde de gerçekleşmesini beklemek şu an için doğru olmayacaktır. Dolayısıyla da yukarıda örneklediğim görevleri gerçekleştirecek uygulamalar masaüstündeki benzerlerine göre önemli mimari farklılıklara sahip olmalıdırlar.

   Windows 8; dosya yükleme/indirme, müzik dinleme, cihazlar arası veri senkronizasyonu gibi temel bazı görevlerin sunduğu API’ler yardımıyla arka planda yapılabilmesine olanak sağlamakta. Buna ek olarak; başlat menüsündeki karoların güncellenmesi, planlı bilgilendirmeler ve arka plan görevleri başlıkları altında gruplayabileceğimiz ek yapılarda sunulmaktadır. Sıraladığım bu arka plan görevlerinin her birini ayrı ayrı sizlerle paylaşmayı planlamakla birlikte, bu makalemde önceliği arka plan görevlerine vereceğim.

   Windows 8 arka plan görevleri olabildiğince hafif kod parçaları olarak düşünülmelidir ve pek çoklarınızın tahmin ettiğinden farklı olarak ne işletim sisteminin açılmasıyla birlikte otomatik olarak başlar ne de sistem kapanana kadar açık kalır; çünkü böylesi bir senaryo işlemci ve hafıza kullanımını dolayısıyla da güç tüketimini olumsuz etkileyecektir. Bunun yerine arka plan görevlerinin başlatılması belirli bir tetiklemeye ve bir dizi koşula bağlanmış ve kısıtlı bir işlemci zamanını kullanmalarına izin verilmiştir. Yani bir arka plan görevi örneğin; kullanıcı cihaz başındayken fakat sadece aktif bir internet bağlantısı bulunduğunda başlatılabilir. Bir başka örnek; bir arka plan görevi bir sms mesajı geldiğinde başlatılabilir ve sms içeriğinde reklam olmasına göre sms’i bloklayan kodumuz çalışabilir.

   Arka plan görevleri bir sınıf kütüphanesi içerisinde yer alacak şekilde tasarlanmıştır. Dolayısıyla da çalışabilmeleri için bir host uygulamaya ihtiyaçları vardır. Windows 8’de arka plan görevlerimizin çalışmasından BackgroundTaskHost.exe uygulaması sorumludur. Buna istisna olarak PushNotificationTrigger türü ile tetiklenen görevlerde işletim sistemin sunduğu uygulama yerine kendimiz de bir host uygulama belirtebiliriz. Farklı bir istisna olarak, ControlChannelTrigger türü ile tetiklenen görevler için ise işletim sistemince sunulan host uygulamasının kullanılmasına izin verilmemektedir ve görev oluşturulurken bir başka host uygulama verilmelidir.

    Arka plan görevlerine kısıtlı sistem kaynağı veriliyor olmasına karşın buna tek istisna kilit ekranında yer alanlardır. Kilit ekranı kullanıcının devamlı göz önünde bulunması nedeniyle bu istisnai durum söz konusu. Son kullanıcı her zaman için kilit ekranında güncel veriyi görmek isteyecektir. Dolayısıyla kilit ekranında yer alan görevler diğerlerine göre daha fazla işlemci zamanı, daha fazla sistem kaynağı kullanmak zorunda kalacaktır. Öte yandan, kilit ekranında sonsuz sayıda göreve izin vermek sistem kaynaklarının hatalı ve bilinçsizce tüketilmesine neden olacağından en fazla 7 görevin aynı anda kilit ekranında bulunmasına izin verilmiştir. Kullanıcı hangi görevlerin kilit ekranında bulunacağına bir sistem arayüzünden karar verebileceği gibi geliştirdiğimiz uygulamalar da kilit ekranında yer alabilmeyi kullanıcıdan talep edebilirler. Bu isteğin kullanıcıya iletilmesi için BackgroundExecutionManager kullanılmalıdır.

   Bir uygulama istediği zaman Windows.ApplicationModel.Background isim uzayı altında tanımlı olan BackgroundTaskBuilder sınıfı yardımıyla IBackgroundTask arayüzüne uygun sınıfını/sınıflarını arka plan görevi olarak tanımlayabilir. Tanımlama sırasında tetikleme olayı ve varsa koşulları yanında çalıştırılacak olan görev sınıfının tam adı da verilmelidir. Bu makalemde daha çok arka plan görevi konseptine değinmeyi amaçladığım için BackgroundTaskBuilder yardımıyla programınız içerisinden nasıl bir arka plan görevi oluşturabileceğinizi bir sonraki makalemde sizlerle paylaşacağım.

   Arka plan görevlerinin bir tetikleme ile başladığından bahsetmiştim. Bu tetiklemeler sistem tetiklemeleri, zamanlayıcı tetiklemeleri, Push Notification tetiklemeleri, kontrol kanalı tetiklemeleri, bakım tetiklemeleri gibi farklı farklı gruplar altında bulunmaktadır. Aşağıda, muhtemelen en sık kullanacağınız tetikleme türlerinden SystemTriggerType enum’u içerisinde tanımlı olan ve bir arka plan görevinin başlamasında kullanılabilecek olan tetikleyici olayları açıklamalarıyla birlikte bulabilirsiniz;

Değer Açıklama
Invalid Geçersiz bir tetikleme
SmsReceived Sisteme bağlı bir GSM cihazına yeni bir SMS ulaştığında arka plan tetiklenecektir
UserPresent Sistemde aktif bir kullanıcı olduğun arka plan görevi tetiklenecektir
UserAway Aktif kullanıcı sistemde olmadığında arka plan görevi tetiklenecektir
NetworkStateChange Network bağlantısı ile ilgili bir değişiklik olduğunda arka plan görevi tetiklenecektir. Bu değişikli bağlantının sağlanması/gitmesi olabileceği gibi ücretlendirme değişikliği de olabilir.
ControlChannelReset Kontrol kanalı sıfırlandığında arka plan görevi tetiklenecektir
InternetAvailable Internet bağlantısı olduğunda arka plan görevi tetiklenecektir
SessionConnected Sistemde bir oturum bağlandığında arka plan görevi tetiklenecektir
ServicingComplete Mevcut bir uygulama güncellendiğinde arka plan görevi tetiklenecektir
LockScreenApplicationAdded Kilit ekranına yeni bir karo eklendiğinde arka plan görevi tetiklenecektir
LockScreenApplicationRemoved Mevcut bir karo kilit ekranından kaldırıldığında arka plan görevi tetiklenecektir
TimeZoneChange Sistemde tanımlı zaman dilimi değiştiğinde arka plan görevi tetiklenecektir
OnlineIdConnectedStateChange Tanımlı olan bir Microsoft hesabı değiştiğinde arka plan görevi tetiklenecektir

 

   Benzer şekilde aşağıda, SystemConditionType enum’u içerisinde tanımlı olan ve bir arka plan görevinin başlamasında kullanılabilecek olan koşulları bulabilirsiniz;

Değer Açıklama
Invalid Geçersiz bir koşul
UserPresent Arka plan görevinin sistemde bir kullanıcı bulunduğunda çalışması koşuludur
UserNotPresent Arka plan görevinin sistemde bir kullanıcı bulunmadığında çalışması koşuludur
InternetAvailable Arka plan görevinin internet bağlantısı olduğunda çalışması koşuludur
InternetNotAvailable Arka plan görevinin internet bağlantısı olmadığında çalışması koşuludur
SessionConnected Arka plan görevinin bir kullanıcı oturumu bulunduğunda çalışması koşuludur
SessionDisconnected Arka plan görevinin bir kullanıcı oturumu koptuğunda çalışması koşuludur

 

   SystemTriggerType ile ilgili düşmem gereken önemli bir not; burada yer alan tetikleme seçeneklerinin hepsi tüm arka plan görevlerince kullanılamamaktadır. Sistem genelinde tetiklenebilen bu sistem tetikleme türlerinden InternetAvailable, NetworkStateChange, OnlineIdConnectedStateChange, SmsReceived ve TimeZoneChange tetikleme türleri tüm arka plan görevlerince kullanılabilmesine karşın UserPresent, UserAway, ControlChannelReset ve SessionConnected tetikleme türleri sadece kilit ekranında yer alan görevler tarafından kullanabilmektedir. Bu tetikleme türleri kilit ekranında yer almayan görevlerce kullanılmak istediğinde “erişim reddedildi” (access denied) hatası alacaklardır. LockScreenApplicationAdded ve LockScreenApplicationRemoved sistem tetikleme türleri ise görev kilit ekranında olsun ya da olmasın kullanılabilmektedir.

   Bakım tetiklemesi (Maintenance Trigger) cihazın bir AC güç kaynağına bağlanması sonucu oluşmaktadır. Adından da anlaşılabileceği gibi bu tetikleme türündeki amaç yüksek güç tüketimi olan ve yoğun işlemci/ram tüketen bakım işlerinin kullanıcıyı etkilemeden ve sistem bir güç kaynağına bağlı iken yapılmasıdır.

   Zaman tetiklemesi (Time Trigger) işletim sisteminin belirlediğiniz aralıklarla görevinizi tetiklemesi sonucu oluşmaktadır. Bu tetikleme türünü belirli aralıklarla gerçekleştirmek istediğiniz işleriniz için kullanabilirsiniz.

   Makalemin başlarında da belirttiğim gibi Windows 8 arka plan görev mimarisi tasarlanırken düşük güç tüketimi, işlemci/ram ve network kullanımına özen gösterildi. Bu sebeple yukarıda sıraladığım tetikleme seçeneklerinden birisiyle tetiklenen bir arka plan görevi sonsuza dek çalışamaz. Normal bir arka plan görevine her 2 saatte bir yenilecek olan 1 saniyelik işlemci zamanı (evet, yanlış okumadınız :) ), kilit ekranında yer alan bir arka plan görevine ise her 15 dakikada 2 saniyelik işlemci zamanı verilmektedir. İçinizi rahatlatır mı bilmem; burada bahsettiğimiz 1 saniyelik zaman diliminin 1 işlemci saniyesi olduğunun altını çizmeliyim, bu bizlerin günlük yaşamda kullandığımız 1 saniyeden farklıdır… 3G ve WiFi bağlantılarının da yüksek güç tüketimi oluşturabilmesi nedeniyle aynı CPU kullanımında olduğu gibi network kullanımında da bir sınırlama söz konusudur. Bu değer kullanılan network arayüzünün tükettiği enerjiye göre değişkenlik göstermektedir. Cihazın bir güç kaynağına bağlı olduğu durumlarda ise network kullanımında bir sınır bulunmayacaktır.

   Son olarak; bir uygulama sistemden kaldırıldığında tanımlamış olduğu tüm arka plan görevleri de işletim sistemince otomatik olarak silinecektir.

Fatih Boy

http://www.enterprisecoding.com
http://twitter.com/fatihboy

Yazar Hakkında

Fatih Boy

Fatih Boy

www.enterprisecoding.com

İzmir'de yaşayan bir bilgisayar mühendisi olan Fatih aynı zamanda son iki yıldır Visual C# alanında Microsoft MVP ünvanı sahibidir. Boş zamanlarında açık kaynak kodlu projeler geliştiren Fatih, masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz.

Sosyal Medya

ORANLAR

  • 4033izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 123776
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 70839
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51496
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ