Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Odsek za računarsku tehniku i računarske komunikacije
Projektovanje namenskihračunarskih struktura 1
Aplikativni radni okvir
Arhitektura Androida
App0 App1 App2 App3 App4
Application layer
Activity manager
Frameworks layerWindow manager
Content providers
View systemNotification
manager
Package manager
Resource manager
XMPP service
Surface manager
Runtime layer
OpenGL/ES
SGL
Media framework
Freetype
SSL
SQLite
Webkit
libc
Libraries Android runtime
CoreLibraries
Dalvik Virtual Machine (DVM)
Kernel layer
Display driver
USB driver
Mouse driver
Keyboard driver
Ethernet driver
WiFi driver
Flash memory driver
Audio drivers
Binder (IPC) driver
Power management
Hardware
Java
C, C
++, n
ativ
e co
de
Ass
emb
ler,
C
Graphics Audio Camera GPS ...
Hardware Abstraction Layer (HAL)
2020 2
Application Framework
Aplikativni radni okvir predstavlja sloj koji premošćuje razlike između višeg sloja aplikacija (Java svet) i nižeg nativnog sloja (nativni svet)
Sastoji se od definicije Java klasa, interfejsi, sprega i načina upotrebe (workflow), čijom upotrebom se grade Android aplikacije
Aplikativni radni okvir (uz razvojne alate, naravno) diktira pristup razvoju Android aplikacija. Aplikacije moraju poštovati ograničenja koja radni okvir nameće!
Dizajn je ključni element ovog sloja!
o Predstavlja jedinu spregu vidljivu programerima
Ključni elementi ovog sloja su prikazana niže
2020 3
Načelna struktura aplikativnog radnog okvira
Sloj radnog okvira aplikacija kombinuje niže, jednostavnije operacije u sistemske funkcije
Time definiše funkcionalnost koji je dostupan u Java svetu, čija je manifestacija Android SDK
Gornji deo radnog okvira su Java klase i interfejsi koji se preko JNI sprege povezuju sa
JNI je mehanizam za upotrebu C nativnihfuncija u Java programima (Java NativeInvocation)
Naravno, ponekad je potrebno dodatno realizovati i nativni prilagodni deo
Ali u principu i JNI sloj, i nativni prilagodni deo su tanki slojevi
2020 4
Radni okvir aplikacija
Sloj aplikacija
Nativni sloj
Java
Nat
ive
JNI
Nativni prilagodni deo
Komponente podržane u Androidu
Veliki broj grafičkih elemenata
o Komponente (view, widgets, home-screen widgets)
o Raspored (layouts)
o Događaji (events)
o Resursi (resources)
o Meniji, dijalozi
o Pozivanje drugih aktivnosti
o Adapteri
o AsyncTask, itd.
2020 5
Podržava veliki broj uređaja
o ekran osetljiv na dodir
o tasteri
o radio (telefon)
o kamera
o kompas
o GPS, Bluetooth
o WiFi, senzori pokreta
o NFC
Mapiranje komponenti na programske objekte
I još mnogo toga.
Android Class Libraryandroid
ManifestR
android.accessibilityservice
AccessibilityServiceAccessibilityServiceInfo
android.accounts
AccountManagerCallback<V>AccountManagerFuture<V>OnAccountsUpdateListenerAbstractAccountAuthenticatorAccountAccountAuthenticatorActivityAccountAuthenticatorResponseAccountManagerAuthenticatorDescription
android.app
ActivityActivityGroupActivityManagerAlarmManagerAlertDialogAliasActivityApplicationDatePickerDialogDialogExpandableListActivityInstrumentationIntentServiceKeyguardManagerLauncherActivityListActivityLocalActivityManagerNotificationNotificationManagerPendingIntentProgressDialogSearchableInfoSearchManagerServiceTabActivityUiModeManagerWallpaperInfoWallpaperManager
android.appwidget
AppWidgetHostAppWidgetHostViewAppWidgetManagerAppWidgetProviderAppWidgetProvderInfo
android.bluetooth
BluetoothAdapterBluetoothClassBluetoothDeviceBluetoothServerSocketBluetoothSocket
android.content
ComponentCallbacksDialogInterfaceEntityIteratorServceConnectonSharedPreferencesSyncStatusObserverAbstractThreadedSyncAdapterAsyncQueryHandlerBroadcastReceiverComponentNameContentProviderContentProviderClientContentProviderOperationContentProviderResultContentQueryMapContentResolverContentUrisContentValuesContextContextWrapperEntityIntentIntentFilterIntentSenderMutableContextWrapperPeriodicSyncSearchRecentSuggestionsProviderSyncAdapterTypeSyncContextSyncInfoSyncResultSyncStatsUriMatcher
android.database.sqlite
SQLiteCursorDriverSQLiteDatabase.CursorFactorySQLiteTransactionListenerSQLiteClosableSQLiteCursorSQLiteDatabaseSQLiteOpenHelperSQLiteProgramSQLiteQuerySQLiteQueryBuilderSQLiteStatement
android.gesture
GestureGestureLibrariesGestureOverlayViewGesturePointGestureStoreGestureStrokeGestureUtilsOrientedBoundingBoxPrediction
android.graphics.drawable
AnimatableAnimationDrawableBitmapDrawableClipDrawableColorDrawableDrawableDrawableContainerGradientDrawableInsetDrawableLayerDrawableLevelListDrawableNinePatchDrawablePaintDrawablePictureDrawableRotateDrawableScaleDrawableShapeDrawableStateListDrawableTransitionDrawable
android.graphics.drawable.shapes
ArcShapeOvalShapePathShapeRectShapeRoundRectShapeShape
android.hardware
SensorEventListenerSensorListenerCameraGeomagneticFieldSensorSensorEventSensorManager
android.inputmethodservice
AbstractInputMethodServiceExtractEditTextInputMethodServiceKeyboardKeyboardView
android.location
LocationListenerAddressCriteriaGeocoderGpsSatelliteGpsStatusLocationLocationManagerLocationProvider
android.media
android.net
ConnectivityManagerCredentialsDhcpInfoLocalServerSocketLocalSocketLocalSocketAddressMailToNetworkInfoProxySSLCertificateSocketFactorySSLSessionCacheTrafficStatsUriUriQuerySanitizer
android.net.http
AndroidHttpClientSslCertificateSslError
android.net.wifi
ScanResultWifiConfigurationWifiInfoWifiManager
android.opengl
ETC1ETC1UtilGLDebugHelperGLES10GLES10ExtGLES11GLES11ExtGLES20GLSurfaceViewGLUGLUtilsMatrixVisibility
android.os
IbinderIinterfaceParcelableAsyncTaskBatteryManagerBinderBuildConditionVariableCountDownTimerDebugDropBoxManagerEnvironmentFileObserverHandlerLooperMemoryFileMessageMessageQueueMessengerParcelParcelFileDescriptorParcelUuidPatternMatcherPowerManagerProcessRecoverySystemRemoteCallbackListResultReceiverStatFsSystemClockTokenWatcherVibrator
android.provider
BaseColumnsOpenableColumnsBrowserCallLogContactsContactsContractLiveFoldersMediaStoreSearchRecentSuggestionsSettingsSyncStateContractUserDictionary
android.sax
ElementListenerEndElementListenerEndTextElementListenerStartElementListenerTextElementListenerElementRootElement
android.speech
RecognitionListenerRecognitionServiceRecognizerIntentSpeechRecognizer
android.speech.tts
TextToSpeech
android.telephony
CellLocationNeighboringCellInfoPhoneNumberFormattingTextWatcherPhoneNumberUtilsPhoneStateListenerServiceStateSignalStrengthSmsManagerSmsMessageTelephonyManager
android.test
PerformanceTestCaseTestSuiteProviderActivityInstrumentationTestCaseActivityTestCaseActivityUnitTestCaseAndroidTestCaseAndroidTestRunnerApplicationTestCaseInstrumentationTestCaseInstrumentationTestRunnerInstrumentationTestSuiteIsolatedContextMoreAssertsProviderTestCaseRenamingDelgatingContextServiceTestCaseSingleLaunchActivityTestCaseSyncBaseInstrumentationTouchUtilsViewAsserts
android.test.mock
MockApplicationMockContentProviderMockContentResolverMockContextMockCursorMockDialogInterfaceMockPackageManagerMockResources
android.test.suitebuilder
TestMethodTestSuiteBuilder
android.text
EditableGetCharsInputFilterInputTypeNoCopySpanParcelableSpanSpannableSpannedSpanWatcherTextWatcherAlteredCharSequenceAndroidCharacterAnnotationAutoTextBoringLayoutClipboardManagerDynamicLayoutHtmlLayoutLoginFilterSelectionSpannableStringSpannableStringBuilderSpannedStringStaticLayoutTextPaintTextUtils
android.text.format
DateFormatDateUtilsFormatterTime
android.text.method
KeyListenerMovementMethodTransformationMethodArrowKeyMovementMethodBaseKeyListenerCharacterPickerDialogDateKeyListenerDateTimeKeyListenerDialerKeyListenerDigitsKeyListenerHideReturnsTransformationMethodLinkMovementMethodMetaKeyKeyListenerMultiTapKeyListenerNumberKeyListenerPasswordTransformationMethodQwertyKeyListenerReplacementTransformationMethodScrollingMovementMethodSingleLineTransformationMethodTextKeyListenerTimeKeyListenerTouch
android.text.style
AlignmentSpanLeadingMarginSpanLineBackgroundSpanLineHeightSpanParagraphStyleTabStopSpanUpdateAppearanceUpdateLayoutWrapTogetherSpanAbsoluteSizeSpanBackgroundColorSpanBulletSpanCharacterStyleClickableSpanDrawableMarginSpanDynamicDrawableSpanForegroundColorSpanIconMarginSpanImageSpanMaskFilterSpanMetricAffectingSpanQuoteSpanRasterizerSpanRelativeSizeSpanReplacementSpanScaleXSpanStrikethroughSpanStyleSpanSubscriptSpanSuperscriptSpanTextAppearanceSpanTypefaceSpanUnderlineSpanURLSpan
android.text.util
LinkifyRfc822TokenRfc822Tokenizer
android.util
AttributeSetPrinterBase64Base64InputStreamBase64OutputStreamConfigDebugUtilsDisplayMetricsEventLogEventLogTagsFloatMathLogLogPrinterMonthDisplayHelperPairPatternsPrintStreamPrinterPrintWriterPrinterSparseArraySparseBooleanArraySparseIntArrayStateSetStringBuilderPrinterTimeUtilsTimingLoggerTypedValueXml
android.view.accessibility
AccessibilityEventSourceAccessibilityEventAccessibilityManager
android.view.animation
InterpolatorAccelerateDecelerateInterpolatorAccelerateInterpolatorAlphaAnimationAnimationAnimationSetAnimationUtilsAnticipateInterpolatorAnticipateOvershootInterpolatorBounceInterpolatorCycleInterpolatorDecelerateInterpolatorGridLayoutAnimationControllerLayoutAnimationControllerLinearInterpolatorOvershootInterpolatorRotateAnimationScaleAnimationTransformationTranslateAnimation
android.view.inputmethod
InputConnectionInputMethodInputMethodSessionBaseInputConnectionCompletionInfoEditorInfoExtractedTextExtractedTextRequestInputBindingInputConnectionWrapperInputMethodInfoInputMethodManager
android.database
CrossProcessCursorCursorAbstractCursorAbstractWindowedCursorCharArrayBufferContentObservableContentObserverCursorJoinerCursorWindowCursorWrapperDatabaseUtilsDataSetObservableDataSetObserverMatrixCursorMergeCursorObservable<T>
android.graphics
AvoidXferModeBitmapBitmapFactoryBitmapShaderBlurMaskFilterCameraCanvasColorColorFilterColorMatrixColorMatrixColorFilterComposePathEffectComposeShaderCornerPathEffectDashPathEffectDiscretePathEffectDrawFilterEmbossMaskFilterImageFormatInterpolatorLayerRasterizerLightingColorFilterLinearGradientMaskFilterMatrixMovieNinePatch
PaintPaintFlagsDrawFilterPathPathDashPathEffectPathEffectPathMeasurePicturePixelFormatPixelXorXfermodePointPointFPorterDuffPorterDuffColorFilterPorterDuffXfermodeRadialGradientRasterizerRectRectFRegionRegionIteratorShaderSumPathEffectSweepGradientTypefaceXfermodeYuvImage
AsyncPlayerAudioFormatAudioManagerAudioRecordAudioTrackCamcorderProfileExifInterfaceFaceDetectorJetPlayer
MediaPlayerMediaRecorderMediaScannerConnectionRingtoneRingtoneManagerSoundPoolThumbnailUtilsToneGenerator
An
dro
id S
DK
Po
ster
by
Fran
k H
un
leth
is li
cen
sed
un
der
a C
reat
ive
Co
mm
on
s 3
.0 A
ttri
bu
tio
n L
ice
nse
. See
htt
p:/
/tro
od
on
-so
ftw
are.
com
/Th
e A
nd
roid
Ro
bo
t is
rep
rod
uce
d fr
om
wo
rk c
rea
ted
an
d s
har
ed b
y G
oo
gle
and
use
d a
cco
rdin
g to
ter
ms
des
crib
ed in
the
Cre
ativ
e C
om
mo
ns
3.0
Att
rib
uti
on
Lic
ense
.
android.service.wallpaper
WallpaperService
android.view
ContextMenuMenuMenuItemSubMenuSurfaceHolderViewManagerViewParentWindowManagerAbsSavedStateContextThemeWrapperDisplayFocusFinderGestureDetectorGravityHapticFeedbackConstantsKeyCharacterMapKeyEventLayoutInflaterMenuInflaterMotionEventOrientationEventListenerOrientationListenerScaleGestureDetectorSoundEffectConstantsSurfaceSurfaceViewTouchDelegateVelocityTrackerViewViewConfigurationViewDebugViewGroupViewStubViewTreeObserverWindow
android.widget
AdapterCheckableExpandableListAdapterFilterableFilterQueryProviderHeterogeneousExpandableListListAdapterSectionIndexerSpinnerAdapterWrapperListAdapterAbsListViewAbsoluteLayoutAbsSeekBarAbsSpinnerAdapterViewAlphabetIndexerAnalogClockArrayAdapterAutoCompleteTextViewBaseAdapterBaseExpandableListAdapterButtonCheckBoxCheckedTextViewChronometerCompoundButtonCursorAdapterCursorTreeAdapter
DatePickerDialerFilterDigitalClockEditTextExpandableListViewFilterFrameLayoutGalleryGridViewHeaderViewListAdapterHorizontalScrollViewImageButtonImageSwitcherImageViewLinearLayoutListViewMediaControllerMultiAutoCompleteTextViewPopupWindowProgressBarQuickContactBadgeRadioButtonRadioGroupRatingBarRelativeLayoutRemoteViewsResourceCursorAdapterResourceCursorTreeAdapter
ScrollerScrollViewSeekBarSimpleAdapterSimpleCursorAdapterSimpleCursorTreeAdapterSimpleExpandableListAdapterSlidingDrawerSpinnerTabHostTableLayoutTableRowTabWidgetTextSwitcherTextViewTimePickerToastToggleButtonTwoLineListItmeVideoViewViewAnimatorViewFlipperViewSwitcherZoomButtonZoomButtonsControllerZoomControls
android.preference
CheckBoxPreferenceDialogPreferenceEditTextPreferenceListPreferencePreferenceRingtonePreference
android.webkit
DownloadListenerPluginStubUrlInterceptHandlerValueCallbackCacheManagerConsoleMessageCookieManagerCookieSyncManagerDateSorterGeolocationPermissionsHttpAuthHandlerJsPromptResultJsResultMimeTypeMapPluginPluginDataPluginListSslErrorHandlerUrlInterceptRegistryURLUtilWebBackForwardListWebChromeClientWebHistoryItemSebIconDatabaseWebSettingsWebStorageWebViewWebViewClientWebViewDatabase
2020 6
Dizajn
Arhitektura
Workflow
Primeri dizajn odluka iz aplikativnog radnog okvira
U radnom okviru aplikacija vidljivi su neki dizajn elementi koji su veoma korisni primeri
Ti primeri se mogu replicirati i u mnogim drugim rešenjima kao oprobani koncepti
Stoga, poželjno je razumeti ih i primenjivati u svom dizajnu
Primeri koji će se opisati su
o Podsistem za rukovanje grafičkim elementima (pojednostavljen)
o Dizajn rasporeda (layouts)
o Asinhrona obrada podataka
o Rukovanje resursima
2020 7
Poseban GUI
Donekle sličan GUI koji se koristi na stonim računarima (ranije sličniji, sada specifičniji)
Dodir i pritisak prsta po ekranu unosi dodatnu dimenziju i ima dodatna značenja
o dug pritisak – kontekstni meni
o pomeranje – skrolovanje
o zaletanje – fling – animacija skrolovanja
o dva prsta se pomeraju – multi touch – zoom i sl.
Prepoznaje ih neka komponenta fizičke arhitekture, i generiše odgovarajuće događaje u OS – to se dešava ispod haube
GUI se konstantno menja – zašto?
Kako to utiče na dizajn?
2020 8
Podsistem za rukovanje grafičkim elementima
ViewGroup je osnovna klasa za layout kontejnere koja sadrži View elemente kao svoju decu i odgovorni su sa njihov raspored na ekranu
View je osnovni element za stvaranje grafičke korisničke sprege. To je pravougaoniobjekat na ekranu odgovoran za iscrtavanje sadržaja i obradu događaja
View komponente su organizovane u strukturu poput stabla
View komponente mogu biti definisane u XML deskriptoru ili run-time
Korišćeni koncepti u dizajnu primera
Polimorfizam Java programskog jezika
Hijerarhija klasa Android aplikativnog radnog okvira
Tipizirane kolekcije Java programskog jezika (liste, stabla)
2020 9
Primer hijerarhije vizuelnih elemenata
2020 10
I pripadajući algoritmi za crtanje, uređenje, stvaranje i brisanje, itd.
Primer dizajna - Layouts
Klase za prostorni razmeštaj (raspored) komponenti na ekranu
Jedna aktivnost može da ima jedan ili više layout-a
mogu se kombinovati (jedan raspored unutar drugog)
Proširiv sistem, tokom evolucije Android dodalo se niz novih layout na primer za tablete, TV uređaje, i sl.
Linear Layout Relative Layout Table Layout Tab Layout
2020 11
Dizajn odluka – Asinhroni događaji
Android aplikacije reaguju na događaje korisničkog interfejsa
Dodir (tap) po kontroli se pretvara u događaj koji registruje odgovarajući osluškivač (Listener)
Na primer, tap po dugmetu će biti “uhvaćen” na sledeći način:
btnFrame.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Ovde zadati reakciju na događaj
}
});
Asinhroni događaj se obrađuje u callback metodi ili objektu.
2020 12
Dizajn podsistema za rukovanje resursima
Moderne aplikacije neminovno sadrže resurse
Dizajn rukovanja resursima je naizgled jednostavna stvar, ali u stvarnosti nije
Mora koordinisano da se dizajnira sa Dizajnom APK
Sistemom za upravljanje aplikacijama (instalacijom, brisanjem, pokretanjem)
Pravima pristupa resursima tokom rada aplikacije
Imenovanjem resursa u skladu sa mogućnostima platforme
Stoga, resursi se nalaze u APK u folderima, instaliraju se na fajl sistem raspakivanjem APK u namenski data folder, koje može da pristupa samo aplikacija, i iz koje po pravilu može samo da čita. Resursi se imenuju u skladu sa Linux konvencijom (mala slova i eventualno „_“).
2020 13
Rezime
Tokom razvoja Android aplikacija, osim fokusa na rešavanje konkretnih problema, potrebno je obratiti pažnju na vidljive koncepte koji se koriste.
To je potrebno iz nekoliko razloga:
o Poznavanje mehanizama olakšava i ubrzava razvoj
o Povećava samopouzdanje, a time i produktivnost
o Olakšava pronalaženje grešaka
Osim toga, ti primeri predstavljaju generička rešenja koja su se u proteklih 10 godina pokazala kao efikasna i nisu nužno vezana za platformu i programski jezik.
o Stoga su to dokazani koncepti koji se mogu primeniti u sopstvenom dizajnu.
o Time se smanjuje vreme potrebno za dizajn, smanjuje se i prostor za greška u dizajnu (koje su najskuplje za ispravljanje)
2020 14