FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ライフサイクルの動作を確認

今更ながらライフサイクル(onCreate()→onStart()→onResume())の理解を
曖昧なまま開発を進めてしまっていたため、流れを確認するために
サンプルソースを作ってみた。

説明
 よく参考書なので目にするこのライフサイクルを動かして確かめる。
 cycletest.java(メインアクティビティ)
 main.xml(メインのレイアウト)

lifecycle

lifecycle.png




cycletest.java


public class cycletest extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show();
}

@Override
protected void onDestroy() {
super.onDestroy();
Toast.makeText(this, "onDestory", Toast.LENGTH_SHORT).show();
}

@Override
protected void onPause() {
super.onPause();
Toast.makeText(this, "onPause", Toast.LENGTH_SHORT).show();
}

@Override
protected void onRestart() {
super.onRestart();
Toast.makeText(this, "onRestart", Toast.LENGTH_SHORT).show();
}

@Override
protected void onResume() {
super.onResume();
setContentView(R.layout.main);
Toast.makeText(this, "onResume", Toast.LENGTH_SHORT).show();
}

@Override
protected void onStart() {
super.onStart();
Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show();
}

@Override
protected void onStop() {
super.onStop();
Toast.makeText(this, "onStop", Toast.LENGTH_SHORT).show();
}
}



main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"

<TextView
android:text="@string/hello"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>




これを実行することで画面下にポップアップで状態の変化を表示してくれる。
そこでいくつか動作を確認してみた。


●アプリ起動→着信→アプリ起動

 onCreate()→onStart()→onResume()→着信→onPause()→onStop()
 →アプリ起動→onRestart()→onStart()→onResume()


●アプリ起動→アラートが鳴る(ポップアップ)→アプリ起動

 onCreate()→onStart()→onResume()→アラート→onPause()
 →アプリ起動→onResume()


●アプリ起動→ホームボタン(ホーム画面表示)→アプリ起動

 onCreate()→onStart()→onResume()→ホーム画面表示→onPause()→onStop()
 →アプリ起動→onRestart()→onStart()→onResume()


●アプリ起動→戻るボタン(ホーム画面表示)→アプリ起動

 onCreate()→onStart()→onResume()→戻るボタン→onPause()→onStop()→onDestroy()
 →アプリ起動→onCreate()→onStart()→onResume()



戻るボタンを押した場合は、起動アクティビティが1画面しかないため、ホーム画面に戻ることとなる。
その際、アプリ側ではonStop()で止まらず、onDestroy()まで処理しているようだ。
と言う事で、アプリを再び起動した際は、onCreate()の処理が再び流れる。
しかし、finish()で終了はさせていないため、onDestroy()までライフサイクルでは処理しているが
裏では動き続けている。 ちょっと理解が難しい…ならばonStop()で止めておいてもらいたい。


また、画面を縦表示から横表示に切り替える際も不思議なサイクルとなる。


●アプリ起動→画面を傾け縦表示から横表示に切り替える

 onCreate()→onStart()→onResume()→縦横切り替え→onPause()→onStop()→onDestroy()
 →onCreate()→onStart()→onResume()/strong>



なぜか縦横表示も先ほどと同じライフサイクル。
onDestroy()→onCreate()…


つまりonCreate()内にfinish()を記述してアプリを終了させようとしている方は、やめた方がいい?
メニューボタンに終了を作成してそこでfinish()を実行するのがいいのかなと。




スポンサーサイト

xAuth認証を使ってのTwitter連携

準備
 Twitter4J(TwitterAPIのJavaラッパ)
 twitter4jダウンロードサイトから最新安定ビルドtwitter4j-2.1.4-SNAPSHOT.zipをダウンロード
 eclipseでプロジェクトファイル直下にlibフォルダを作成し、ここに解凍したtwitter4jフォルダ内の
 twitter4j-core-2.1.4-SNAPSHOT.jarをコピーする。
 [プロジェクト]→右クリック[プロパティ]→左メニュー[javaのビルドパス]→[jarの追加]→コピーしたjarファイル
 を選択しOK。


ソース説明
 Twitterのユーザ名とパスワードを入力しボタンを押すと、xAuth認証を実行し、自動で定型文を投稿する。
 twittertest.java(メインアクティビティ)
 main.xml(メインのレイアウト)

 image



twittertest.java

public class twittertest extends Activity {
  private Button button;
  private EditText edittext1,edittext2;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    button = (Button) this.findViewById(R.id.button);
    edittext1 = (EditText)findViewById(R.id.EditText01);
    edittext2 = (EditText)findViewById(R.id.EditText02);

    button.setOnClickListener(new MyClickAdapter());
  }

  private class MyClickAdapter implements OnClickListener {
    private static final String consumerKey = "**********"; ←各自の
    private static final String consumerSecret = "********************"; ←各自の
    public void onClick(View v) {
      String value = edittext1.getText().toString();
      String value2= edittext2.getText().toString();

      ConfigurationBuilder confbuilder =new ConfigurationBuilder();
      confbuilder.setOAuthConsumerKey(consumerKey);
      confbuilder.setOAuthConsumerSecret(consumerSecret);

      TwitterFactory twitterfactory = new TwitterFactory(confbuilder.build());
      Twitter twitter = twitterfactory.getInstance(value,value2);

      try{
        twitter.getOAuthAccessToken();
        twitter.updateStatus("xAuth連携テスト");
        AccessToken token = twitter.getOAuthAccessToken();
      }catch (TwitterException e){
        e.printStackTrace();
      }
    }
  }
}



main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="twitterユーザ名"
/>
<EditText
android:id="@+id/EditText01"
android:layout_width="230dip"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="twitterパスワード"
/>
<EditText
android:id="@+id/EditText02"
android:layout_width="230dip"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/button"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:text="クリック"
/>
</LinearLayout>



AndroidManifest.xml

       |
    </application>
  <uses-sdk android:minSdkVersion="4" />
  <uses-permission android:name="android.permission.INTERNET" /> ←コレを追加
</manifest>


AndroidManifest.xmlに↑を記述していなかったためにエラーで下記のログが出力されました。
"java.net.SocketException: Permission denied (maybe missing INTERNET permission)"
アプリがインターネットを利用する場合はこの記述が必要ですのでお気をつけ下さい。(広告利用時等も)




プロフィール

freedomgen

Author:freedomgen
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。