14
Odsek za računarsku tehniku i računarske komunikacije Projektovanje namenskih ra čunarskih struktura 1 Aplikativni radni okvir

Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

Odsek za računarsku tehniku i računarske komunikacije

Projektovanje namenskihračunarskih struktura 1

Aplikativni radni okvir

Page 2: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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

Page 3: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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

Page 4: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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

Page 5: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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.

Page 6: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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

Page 7: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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

Page 8: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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

Page 9: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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

Page 10: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

Primer hijerarhije vizuelnih elemenata

2020 10

I pripadajući algoritmi za crtanje, uređenje, stvaranje i brisanje, itd.

Page 11: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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

Page 12: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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

Page 13: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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

Page 14: Projektovanje namenskih računarskih struktura 1 · 2020. 6. 28. · Point PointF PorterDuff PorterDuffColorFilte r PorterDuffXfermode RadialGradient Rasterizer Rect RectF ... m

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