ニートが学ぶプログラミング

ニートの日記。プログラムのことやら、くだらないこと、思ったことをまとめていきます。頑張って毎日更新するぞぉ_(:3」∠)_ 更新が連続して途切れたら察してください。

Activityのライフサイクル Androidアプリってどんな風に動いてるの?

こんにちは、鬱太郎です。今日はAndroidアプリのライフサイクル「アクティビティのライフサイクル」について学んだのでそれをまとめたいと思います。

f:id:neet-utsu-taro:20170912122415p:plain

Activityクラス

Activity | Android Developers

上記ドキュメントから、クラスは

package android.app;
public class Activity extends ContextThemeWrapper 
implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, 
View.OnCreateContextMenuListener, ComponentCallbacks2

ということがわかります。継承の詳細は

パッケージ名 クラス名
java.lang Object
android.content Context
android.content ContextWrapper
android.view ContextThemeWrapper
android.app Activity

実装の詳細と主な内容は

インターフェース名 主な内容
LayoutInflater.Factory2 引数を元に新しいViewを作る関数を実装する
Window.Callback ディスプレイに関するイベントのコールバック関数を実装する
KeyEvent.Callback キーボードに関するイベントのコールバック関数を実装する
View.OnCreateContextMenuListener メニューを生成する関数を実装する
ComponentCallbacks2 システムが設定を変更したり、メモリが少なくなった際に呼ばれるコールバック関数を実装する

すべてのフィールドやメソッドを説明しきれないほど、Activityクラスは継承・実装がなされています。

アクティビティの状態遷移

developer.android.com

アクティビティーには基本的に3つの状態があります。

1.実行中(再開)状態

アクティビティが画面上にでて、ユーザーが操作できる状態。

2.一時停止状態

他のアクティビティが画面上に出てメインに表示されているが、このアクティビティも表示されている状態。このアクティビティの上に他のアクティビティが表示されているが、画面すべて覆われているわけではない状態。システムによっては強制終了される場合もある。

3.停止状態

他のアクティビティによって完全に見えない状態。アクティビティがバックグラウンドにある状態。システムによっては強制終了される場合がある。

通常は1の再開状態ですね。ホームボタンなどでアプリを終了し、右下のボタンからアプリを開ける状態を3の停止状態といえます。

Activityのメソッドとアクティビティの状態の関係

公式サイトにある図から

f:id:neet-utsu-taro:20170908191050p:plain
アクティビティの状態遷移の際に呼ばれるメソッドは

起動→実行中(再開状態)

onCreate->onStart->onResume

実行中→一時停止状態

onPause

一時停止状態or実行中→停止状態

(onPause->)onStop

一時停止状態→実行中

onResume

停止状態→実行中

onRestart->onStart->onResume

→終了

(onPause->onStop->)onDestroy

一番重要なメソッドはonCreate

Activityで一番重要なコールバックメソッドはonCreateです。上記にあるアクティビティのライフサイクルの図からも分かりますね。アクティビティが起動でした際に、プログラマが一番最初に操作できるメソッドがonCreateです。ここでレイアウトを設定したり、Listenerを設定したりします。

実際にプログラムを作って確かめてみよう

Activityのコールバックメソッドを追加

Android Studioを起動させ、各コールバックメソッドを追加しましょう追加した例は以下のようになります。

実行確認

実際にVMで実行してみて、いつコールバックメソッドが呼び出されるかを確認していきましょう。

説明しやすくするため私は各コールバックメソッドの末尾

try{
  Thread.sleep(1000);
}catch(InterruptionException e){
  e.printStackTrace();
}

を追加しました。コールバックメソッドが呼ばれ、メッセージを出力した後に1秒待機するものです。ですが、コールバックメソッドで長期間処理するのは好まれないと思うので、今回のテストだけにします。

起動→実行中(再開状態)

アプリを起動

f:id:neet-utsu-taro:20170912225609g:plain

「onResume」の後に画面が初期化されているのがポイントです。

一時停止状態or実行中→停止状態

ホームボタンを押す

f:id:neet-utsu-taro:20170912230352g:plain

ホームボタンを押した瞬間に「onPause」画面からアプリケーションが消えた後に「onStop」が呼び出されているのがポイントです。

履歴から別のアプリケーションを起動

f:id:neet-utsu-taro:20170916195624g:plain

履歴ボタンを押した瞬間に「onPause」画面が完全に小さくなってから「onStop」となるのがポイントです。

停止状態→実行中

履歴からアプリを起動

f:id:neet-utsu-taro:20170912230800g:plain

アプリを選択した瞬間に「onRestart」画面が表示されたままの状態でアプリが起動「onStart」「onResume」と続きます。停止状態でもアプリの状態を保存しているため、初回の起動時のように「onResume」まで待たなくても画面が出現します

→終了

履歴からアプリを消去

f:id:neet-utsu-taro:20170912231821g:plain

アプリを消去したと同時に「onDestroy」が出現onDestroyメソッド中のsleepを待たずに画面が消えました

終わりに

アクティビティのライフサイクル、いかがでしたか?私の知識経験不足のため、不完全なまとめとなってしまったこと申し訳なく思っています。

いろいろ調べてみた結果、onCreate以外使わないな!ってことがわかりました。そんな高度な開発しないですね。。。

記事書いてる最中に「あ、これ使わないな!」と思ったけど(ここまで書いたし、もったいないから投稿しよう)ということで、今回投稿しました。

ここまでご覧いただき、誠にありがとうございます。

またね(‘ω’)ノ

p.s.
関数とメソッドやActivityとアクティビティの表記ゆれ、ごめんなさい。Javaだとメソッドと統一したほうがいいのでしょうけれど、文字数の関係上(あるいはミス)関数としたりしています。アクティビティとActivityは前者がアプリケーション全体のことを指し、後者がクラスのように内部構造を表すものと認識しています。

リンク等まとめ

名称 リンク先
Activityクラスドキュメント https://developer.android.com/reference/android/app/Activity.html
アクティビティについて https://developer.android.com/guide/components/activities.html?hl=ja

Javaのインストール方法(2017年8月 最新版) jdk1.8

こんにちは、鬱太郎です。Androidプログラムを作るためにまず、Javaをインストールします。今回はそれについてまとめてみました。

f:id:neet-utsu-taro:20170831174037p:plain

解説動画

インストールに関する動画を作成しましたので、文章だけではよくわからない人はぜひご覧ください。(※注意:ゆっくりボイスを使用しています。)

Javaをインストールしよう

d.hatena.ne.jp

直接ダウンロードする場合のリンク(Java SE Development Kit 8 - Downloads)または、

検索エンジンにて「Java SE ダウンロード」と入力

f:id:neet-utsu-taro:20170831173226p:plain

URL欄が「www.oracle.com」から始まる「Java SE ダウンロード - Oracle」 をクリック(沢山の方がJavaのダウンロード方法について書かれているため、なかなか公式サイトにたどり着けないことがあります。そのため、公式サイトのURL「www.oracle.com/~」のようになっているか、確認しましょう。)

f:id:neet-utsu-taro:20170831174117p:plain

すると、別のページに促されるので「こちら(USサイト)」をクリック

 

f:id:neet-utsu-taro:20170831174504p:plain

 今回インストールするのはJava Platformなので左側を選択

f:id:neet-utsu-taro:20170831174726p:plain

 上下に項目がありますが、上の「Java SE Development Kit ~~」をダウンロードします。そのために規約に同意する「Accept License Agreement」をチェックしましょう。

f:id:neet-utsu-taro:20170831175142p:plain

自分に合ったOSのものをインストールしましょう。

  • Windows32bit版:Windows x86
  • Windows64bit版:Windows x64
  • Mac OS版:Mac OS X

ダウンロードが完了し、実行します。インストールはそのまま「次へ」を選択して構いません。

f:id:neet-utsu-taro:20170831180559p:plain

 

すべて終了し、インストールが完了します。

システム情報を使った32bitと64bitの見分け方

もし、Windowsを使われている方で、自分の使っているOSが32bit版か64bit版かわからい。という方もいらっしゃるでしょう。その見分け方を説明します。ご自身ですでに理解されてる方はこの項目は飛ばしてください。

 

Windowsに付属しているアプリケーション「ファイル名を指定して実行」を使います。

  • スタートメニューから「ファイル名を指定して実行」を選択
  • キーボードにある「ウィンドウズボタン」と「R」を同時押し

することでそのアプリが起動します。名前欄に「msinfo32」を入力(もしくは「winmsd」)してOKを選択してください。

f:id:neet-utsu-taro:20170831175747p:plain

すると、システム情報というアプリケーションが立ち上がります。

f:id:neet-utsu-taro:20170831180202p:plain

システム情報の中にある「システムの種類」の値から、

  • x86 32bit版
  • x64 64bit版

ということがわかります。

環境変数を設定しよう

インストールをした後、環境変数を登録する必要があります。環境変数には、

  1. Java Development Kitフォルダの場所
  2. Java実行ファイルがあるフォルダの場所
  3. Javac実行ファイルがあるフォルダの場所

を登録する必要があります。2と3は同じフォルダにあるので、

  1. JAVA_HOME変数にjdkのフォルダの場所を登録します。
  2. Path変数にJavaおよびJavacがあるフォルダの場所

まず環境変数を登録するためのウィンドウを開きましょう。

「ファイル名を指定して実行(ウィンドウズボタンキーとRキーの同時押し)」から「sysdm.spl」を名前欄に記入してOKを選択してください。

f:id:neet-utsu-taro:20170831181254p:plain

すると「システムのプロパティ」が開きます。それにある「詳細設定」タブをクリックしましょう。

f:id:neet-utsu-taro:20170831181505p:plain

「詳細設定」タブで開いた画面の右下に、「環境変数」というものがあるのでそこをクリックしてください。

f:id:neet-utsu-taro:20170831181639p:plain

そこから環境変数を登録していきます。

JAVA_HOME変数を登録

システム環境変数の新規を選択します。

f:id:neet-utsu-taro:20170831190009p:plain

  • 変数名:「JAVA_HOME」
  • 変数値:「C:\Program Files\Java\jdk1.8.0_144」※ダウンロードしたバージョンによって変化します

f:id:neet-utsu-taro:20170831190507p:plain

jdkを間違えてjreにしないように注意しましょう。OKを押して、JAVA_HOME変数の新規作成は完了です。

Path変数に追加

今度はもとからある環境変数「Path」に要素を追加します。システム環境変数にある「Path」変数を選択し、編集ボタンを押します。

f:id:neet-utsu-taro:20170831191348p:plain

元からある変数値をいじらないように注意しながら、変数値の最後にカーソルを合わせます。

f:id:neet-utsu-taro:20170831191455p:plain

変数値の区切り文字である「;」セミコロンを入力します

f:id:neet-utsu-taro:20170831191623p:plain

 Windows10の方は、右上にある「新規」をおして、一番最後に変数値を追加してください。

追加する変数値はデフォルトで「C:\Program Files\Java\jdk1.8.0_144\bin」です。

f:id:neet-utsu-taro:20170831192115p:plain

その後、開いてる画面をすべてOKを選択して環境変数の登録が完了します。お疲れ様です。

コマンドプロンプトで実行確認

最後に、コマンドプロンプトで実際にJava、Javacコマンドを実行して動作確認をしましょう。「プログラムを指定して実行」(ウィンドウズボタンキーとRキー同時押し)でcmdと入力します。

f:id:neet-utsu-taro:20170831192749p:plain

コマンドプロンプトで「java -verion」と入力しエンターキーを押します。

 

f:id:neet-utsu-taro:20170831194118p:plain

バージョン情報が出力されたら成功です。次に「javac -version」と入力。

f:id:neet-utsu-taro:20170831194228p:plain

こちらも、バージョン番号が出力されたら成功です。

 

 

以上で環境変数の登録が完全に完了しました。お疲れ様です。

コマンドプロンプトでエラーが出た場合

 コマンドプロンプトでエラーが起きた場合、

  • 環境変数の登録が間違っている
  • 環境変数は間違っていないが、Javaのインストールに問題があった

などが問題になります。とくに、環境変数の登録が間違っている可能性は

  • 変数名(JAVA_HOMEやPath)のスペルが間違っている
  • 変数値が一部間違っている
  • jdkのところをjreとしてしまっている

などがあります。再確認しましょう!

 

終わりに

 いかがでしたか?Javaのインストールできましたでしょうか?質問等ありましたらコメントしていただいて構いません。

 

次はAndroid Studioのインストール方法を紹介したいと思います。よろしくお願いします。

 

p.s. Markdown記法というのを記事製作中に知りました…( ;∀;) 次回からはその記法でチャレンジしてみたいと思います_(:3」∠)_