【Androidstudio・Java】はじめて触ってみてわかったことわからないこと備忘録

#はじめに
3週間ほど前に、Android studio(Java)をはじめて(コード書く人のポジションで)触りました。
わからないワードばかりだったので、調べたこと(とかネットの記事)の備忘録。
(自分が見つけやすくする用です。悪しからず・・・。)

※尚、間違った記述をしている可能性がございます。ご注意ください。
ほとんどメモですがご指摘などもお待ちしております。


#超基本的なことっぽいあれこれ(｀・ω・´)

##AndroidManifest.xml
とってもとっても大事なファイル。
参考：[AndroidManifest.xml の備忘録
](https://qiita.com/izuki_y/items/8cb59b12fef6727ed87b)

##Activity
ActivityやViewConrollerなどスマホ開発用に提供されるコントローラは、"画面を"コントロールするもの。

例えば、アプリとしてA,Bの2画面があるとすると、一般的な実装では、

```
A画面用のアクティビティ(A_Activity)➕レイアウトファイル(A.xml)
B画面用のアクティビティ(B_Activity)➕レイアウトファイル(B.xml)
```
となるらしい。

参考：[Androidアプリ作成の基本“Activity”とは何か？ (1/2)](http://www.atmarkit.co.jp/ait/articles/0901/19/news122.html)


##Fragment

>FragmentはActivityのUIの挙動や部位を表すもの。
Fragmentは必ずActivityに埋め込まれている必要がある。よって、FragmentはActivityで再利用可能な『サブアクティビティ』のようなものである。
Fragmentは独自のライフサイクルを持っているが、ホストとなるActivityの影響を直接受ける。
ActivityはFragmentの追加や削除が行える。

引用元：[Fragmentの基本](https://qiita.com/naoi/items/3e1125d1e1418d09f77a)

##コンストラクタ
眠いからちょっと割愛。

参考：[【Java】 コンストラクタって何？ this( )の意味](https://nobuo-create.net/java-beginner-20/)

##context

>【contextには2種類ある】
①Activityのcontext（使い方：Activity名.this）
　Activityのライフサイクルに依存。基本Activityが破棄される時に一緒に破棄されるが、静的な変数がcontextを参照してる場合、contextのメモリが開放されずメモリリークする可能性がある。
②Applicationのcontext（使い方： getApplicationContext()） 
 　アプリケーションに依存。アプリケーションが生きている限り生き続ける。上に挙げた、静的な変数が参照するcontextはこっちがいい。

引用元：[【Android】contextとは？](http://fkichi.hateblo.jp/entry/2017/03/10/150841)



##findViewById
AndroidのAPIのうち、最もよく利用するメソッドの一つ

##スタイル
スタイルは、View やウィンドウの外観や書式を指定するプロパティの集合。
参考：[Android公式](https://developer.android.com/guide/topics/ui/themes?hl=ja)

##Rクラス
リソースを管理してくれるクラス。
参考：[【Android Studio】javaソース内の「R.~」が全部エラーになった](http://shuri58.hatenablog.com/entry/2016/01/25/235646)

##リソース
参考：[リソースの提供](https://developer.android.com/guide/topics/resources/providing-resources?hl=ja)
[Android Studio ドキュメント 日本語訳](http://westplain.sakuraweb.com/translate/Android%2520Studio/Write%2520Your%2520App/Add%2520App%2520Resources.cgi)

##アセット
画面密度ごと(mdpi, hdpi, xhdpi)のファイルを用意する必要がある。

##レイアウト
参考：[アプリケーションのレイアウト](https://qiita.com/Yuki_Yamada/items/eb4a25cedca2ff8078fd)






##ログ出力

```
Log.v：VERVOSE（すべてのログ情報）
Log.d：DEBUG(デバッグ情報）
Log.i：INFO(情報）
Log.w：WARN(警告）
Log.e：ERROR（致命的な問題）
```
引用元：[Androidアプリ開発でログ(Log)を出力する方法【初心者向け】](https://techacademy.jp/magazine/2726)




#画面遷移
参考：[[Android] アプリの画面を遷移させる](https://akira-watson.com/android/activity-1.html)


# コードの中身のあれこれ(｀・ω・´)
##extends 
機能は継承
使いたいときは、```extends クラス名```って書く。

##privateとpublic

>メソッド経由でしかメンバ変数の値を格納したり参照したり出来ないようにするときに使う。
「private」を頭に付けたメンバ変数は、
メンバ変数が定義されているクラスの中でしか値を格納したり取り出したりということが出来なくなる。
なので、他のクラスでオブジェクトを作成し「オブジェクト名.メンバ変数名 = 値」のように直接メンバ変数に値を格納することを防止できる。



>publicは書いても書かなくてもいいが、後でプログラムを見て分かりやすいように、「private」を書き忘れたわけではなく「public」にしたかったのだと明示的に分かるようにするために、publicは書いておいたほうがいい。



引用：[publicとprivate](https://www.javadrive.jp/start/member/index4.html)

使いたいときは```private 変数の型 メンバ変数名;```って書く。

この辺はなんとなくわかる。(多分)

##static class(内部クラス)

基礎基礎で大事そう。staticだとインスタンス作らないでも呼べるよっていう認識。
iOSとstaticの意味合いが違う？？？

参考：[【Java】内部クラス(インナークラス)の使い方(static class)](https://www.sejuku.net/blog/22637)



## 単位 "dp" 

>密度非依存ピクセル（dp）
UI レイアウトを定義するときに使用する必要のある仮想ピクセル単位。レイアウトの寸法または位置を密度に依存しない方法で表すために使用します。
密度非依存ピクセルは 160 dpi 画面の 1 つの物理ピクセルと同等です。これは、「medium（中）」密度画面用に想定される基準密度です。 使用している画面の実際の密度に基づいて、必要に応じて、dp 単位のスケーリングが透過的に処理されます。 dp 単位から画面ピクセルへの変換は簡単です （px = dp * (dpi / 160)）。たとえば、240 dpi の画面では、1 dp が 1.5 物理ピクセルに相当します。 アプリの UI を定義するときは、常に dp 単位を使用して、密度が異なる画面に UI が適切に表示されるようにする必要があります。

だそうです。
とりあえず初心者的には、画像の大きさを表すやつという認識。

参考：[謎の単位 "dp" (Density-independent Pixel) にせまる。あと drawable の話とか in Android](http://tkengo.github.io/blog/2014/10/18/android-dp/)
[Androidの公式](https://developer.android.com/guide/practices/screens_support)

##import 
こんなような書き方をする

```.java
import android.net.ConnectivityManager;
```

ネットで拾ったメソッドとかコピペして貼り付けたときに、〜〜がimportされせませんよ〜〜ってエラーが出てくる。
Androidstudio、親切。

##Override

オーバーライド。
スーパークラスのメソッドをサブクラスで書きなおしている。

参考：[Java の @Override って何だ](https://qiita.com/karur4n/items/881bb40a1e6694caca9f)


#クラス構成とパッケージ構造あれこれ(｀・ω・´)
- [スマホ(Android)の基礎を知らない人のための基礎　Activity(コントローラ)とレイアウトファイル(ビュー)の関係などなど](http://hide1024.hatenablog.com/entry/2015/11/23/220025)
- [Androidのパッケージ構成について考えてみた](https://qiita.com/kobakei/items/e8452d04f6991be3498a)


そもそもパッケージ(package)とは、クラスを、フォルダのようなもので整理する機能とのこと。

```
package jp.tuyano.myapp;
```
>上記は、```このクラスが、jpフォルダの中のtuyanoフォルダの中のmyappフォルダの中に用意される```の意。
パッケージではドットを使って階層を書く。

引用：[Android開発ビギナーのためのJava超入門](https://www.tuyano.com/index3?id=495001&page=3)



#Git管理であれこれ (｀・ω・´)
##build_file_checksums.ser
プロジェクトをgitから落としてきたときに差分として出てきたやつ。
gitignoreに追加してしまっても問題なさそう？？

参考：[.ideit / cache / build_file_checksums.serを.gitignoreに追加する必要がありますか？](https://translate.googleusercontent.com/translate_c?depth=1&hl=ja&prev=search&rurl=translate.google.co.jp&sl=en&sp=nmt4&u=https://stackoverflow.com/questions/49557737/should-i-add-idea-caches-build-file-checksums-ser-to-gitignore&xid=17259,15700023,15700124,15700149,15700168,15700186,15700191,15700201,15700208&usg=ALkJrhi4yP-JfmqQa6ldV3i_a5rzGqrR3g)
[Android Studioでバージョン管理下に置かないもの](https://qiita.com/komax/items/d1aaecaec0a22cb5bc4e)



以上。