https://developers.facebook.com/?utm_source=Udacity&utm_medium=Learn%20Page&utm_campaign=Udacity_Course2
https://www.udacity.com/course/version-control-with-git--ud123 Approx. 4 Weeks
https://www.udacity.com/course/github-collaboration--ud456 Approx. 4 Weeks
https://www.udacity.com/course/android-basics-nanodegree-by-google--nd803 120h 3 Months At 10 hrs/week
https://www.udacity.com/course/android-developer-nanodegree-by-google--nd801 240h 6 Months at 10hrs/week
https://codelabs.developers.google.com/codelabs/android-performance-tuner-unity/index.html?index=..%2F..index
https://www.udacity.com/course/android-performance--ud825 Approx. 4 Weeks
https://www.udacity.com/course/android-basics-user-input--ud836 Approx. 4 Weeks
https://www.udacity.com/course/android-basics-networking--ud843 Approx. 5 Weeks
https://www.udacity.com/course/new-android-fundamentals--ud851 Approx. 60 Hours
https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012 80h Approx. 2 Months
https://www.udacity.com/course/advanced-android-with-kotlin--ud940 17h Approx. 2 Months
https://www.udacity.com/course/android-interview-prep--ud241 Approx. 1 Week
https://app.pluralsight.com/library/courses/android-application-basics-understanding/table-of-contents 4h15m
https://codelabs.developers.google.com/codelabs/while-in-use-location/index.html?index=..%2F..index#0
Dependency Injection DI https://developer.android.com/training/dependency-injection/hilt-android
https://medium.com/better-programming/jetpack-compose-a-new-and-simple-way-to-create-material-ui-in-android-f49c6fcb448b
dependencies {
// Face features
implementation 'com.google.mlkit:face-detection:16.0.0'
// Text features
implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
}
{
jcenter()
google()
}
Compose UI default stack overlay
App foreground -> toast, background -> notification
RxJava, RxKotlin, RxAndroid
addOnSuccessListener + addOnFailureListener => addOnCompletedListener check Task.Result
build.gradle
dependencies
implementation 'androidx.support:appcompact:1.0'
class MainActivity : AppCompactActivity(){
val otherHelper = OtherHelper(this, lifecycle)
onCreate(saveInstanceState: Bundle?)
// called on rotate
// prefer bundle then intent data
if isNewlyCreated && savedInstanceState != null
viewModel.restoreState(savedInstanceState)
viewModel.isNewlyCreated = false
// adapter = ...
// set action on item click
startActivity(Intent(this, OtherActivity::class.java))
onSaveInstanceState(outState: Bundle?)
// call when rotate
// save some state
outState.putData("DATA_KEY", "DATA_CURRENT_VALUE")
onPause
saveData()
onResume()
adapter.notifyDataSetChanged()
}
class OtherActivity: Activity(){
private val viewModel by lazy { ViewModelProviders.of(this)[OtherActivityViewModel::class.java] }
fun onCreate(){
val vm = ViewModel
}
}
class OtherActivityViewModel : ViewModel(){
isNewlyCreated = true
fun saveState(outState: Bundle){
outState.putInt(intName, intValue)
}
fun restoreState(savedInstanceState: Bundle){
intValue = savedInstanceState.getInt(intName)
}
}
class OtherHelper(val context: Context, val lifecycle: Lifecycle): LiecycleObsever{
init {
lifecycle.addObserver(this)
}
val tag = this::class.simpleName
val currentLat = 0.0
val currentLon = 0.0
val locManager = PLocManager(context){lat,lon ->
currentLat = lat
currentLon = on
Log.d(tag, "$lat $lon")
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun startHandler(){
locManager.start()
}
}
Split screens, flows to each screen
primary
primary dark
accent
Compose | HTML | |||
---|---|---|---|---|
Text("text") | <span>text</span> |
|||
Column | Column | |||
Row | Row | |||
Modifiers | <tag modifier="modifier"> |
|||
image = imageResource(R.id.image); Image(image) |
<img src="src"> |
|||
Spacer() |
<div data-hold="maximum as posible"/> |
annotation, binding, observable
shrink
clean code, best practices, coding conventions, checklist
attachToParent when custom view include in fragment?
kotlin/java -> *.class -> Dalvik Executable (DEX) -> Dalvik virtual machine used by Android -> Android Package (APK)