Browse Source

Initial commit for Threading related projects.

Cristian Tanas 11 năm trước cách đây
mục cha
commit
e765e29330
100 tập tin đã thay đổi với 1516 bổ sung0 xóa
  1. 27 0
      ThreadingAsyncTask/AndroidManifest.xml
  2. BIN
      ThreadingAsyncTask/ic_launcher-web.png
  3. BIN
      ThreadingAsyncTask/libs/android-support-v4.jar
  4. BIN
      ThreadingAsyncTask/res/drawable-hdpi/grumpycat.jpg
  5. BIN
      ThreadingAsyncTask/res/drawable-hdpi/ic_launcher.png
  6. BIN
      ThreadingAsyncTask/res/drawable-mdpi/ic_launcher.png
  7. BIN
      ThreadingAsyncTask/res/drawable-xhdpi/ic_launcher.png
  8. BIN
      ThreadingAsyncTask/res/drawable-xxhdpi/ic_launcher.png
  9. 43 0
      ThreadingAsyncTask/res/layout/activity_main.xml
  10. 11 0
      ThreadingAsyncTask/res/values-v11/styles.xml
  11. 12 0
      ThreadingAsyncTask/res/values-v14/styles.xml
  12. 10 0
      ThreadingAsyncTask/res/values/strings.xml
  13. 20 0
      ThreadingAsyncTask/res/values/styles.xml
  14. 104 0
      ThreadingAsyncTask/src/org/uab/android/threading/asynctask/MainActivity.java
  15. 27 0
      ThreadingHandlerMessages/AndroidManifest.xml
  16. BIN
      ThreadingHandlerMessages/ic_launcher-web.png
  17. BIN
      ThreadingHandlerMessages/libs/android-support-v4.jar
  18. BIN
      ThreadingHandlerMessages/res/drawable-hdpi/grumpycat.jpg
  19. BIN
      ThreadingHandlerMessages/res/drawable-hdpi/ic_launcher.png
  20. BIN
      ThreadingHandlerMessages/res/drawable-mdpi/ic_launcher.png
  21. BIN
      ThreadingHandlerMessages/res/drawable-xhdpi/ic_launcher.png
  22. BIN
      ThreadingHandlerMessages/res/drawable-xxhdpi/ic_launcher.png
  23. 43 0
      ThreadingHandlerMessages/res/layout/activity_main.xml
  24. 11 0
      ThreadingHandlerMessages/res/values-v11/styles.xml
  25. 12 0
      ThreadingHandlerMessages/res/values-v14/styles.xml
  26. 10 0
      ThreadingHandlerMessages/res/values/strings.xml
  27. 20 0
      ThreadingHandlerMessages/res/values/styles.xml
  28. 132 0
      ThreadingHandlerMessages/src/org/uab/android/threading/handlermessages/MainActivity.java
  29. 27 0
      ThreadingHandlerRunnable/AndroidManifest.xml
  30. BIN
      ThreadingHandlerRunnable/ic_launcher-web.png
  31. BIN
      ThreadingHandlerRunnable/libs/android-support-v4.jar
  32. BIN
      ThreadingHandlerRunnable/res/drawable-hdpi/grumpycat.jpg
  33. BIN
      ThreadingHandlerRunnable/res/drawable-hdpi/ic_launcher.png
  34. BIN
      ThreadingHandlerRunnable/res/drawable-mdpi/ic_launcher.png
  35. BIN
      ThreadingHandlerRunnable/res/drawable-xhdpi/ic_launcher.png
  36. BIN
      ThreadingHandlerRunnable/res/drawable-xxhdpi/ic_launcher.png
  37. 43 0
      ThreadingHandlerRunnable/res/layout/activity_main.xml
  38. 11 0
      ThreadingHandlerRunnable/res/values-v11/styles.xml
  39. 12 0
      ThreadingHandlerRunnable/res/values-v14/styles.xml
  40. 10 0
      ThreadingHandlerRunnable/res/values/strings.xml
  41. 20 0
      ThreadingHandlerRunnable/res/values/styles.xml
  42. 121 0
      ThreadingHandlerRunnable/src/org/uab/android/threading/handlerrunnable/MainActivity.java
  43. 27 0
      ThreadingRunOnUIThread/AndroidManifest.xml
  44. BIN
      ThreadingRunOnUIThread/ic_launcher-web.png
  45. BIN
      ThreadingRunOnUIThread/libs/android-support-v4.jar
  46. BIN
      ThreadingRunOnUIThread/res/drawable-hdpi/grumpycat.jpg
  47. BIN
      ThreadingRunOnUIThread/res/drawable-hdpi/ic_launcher.png
  48. BIN
      ThreadingRunOnUIThread/res/drawable-mdpi/ic_launcher.png
  49. BIN
      ThreadingRunOnUIThread/res/drawable-xhdpi/ic_launcher.png
  50. BIN
      ThreadingRunOnUIThread/res/drawable-xxhdpi/ic_launcher.png
  51. 44 0
      ThreadingRunOnUIThread/res/layout/activity_main.xml
  52. 11 0
      ThreadingRunOnUIThread/res/values-v11/styles.xml
  53. 12 0
      ThreadingRunOnUIThread/res/values-v14/styles.xml
  54. 10 0
      ThreadingRunOnUIThread/res/values/strings.xml
  55. 20 0
      ThreadingRunOnUIThread/res/values/styles.xml
  56. 93 0
      ThreadingRunOnUIThread/src/org/uab/android/threading/runonuithread/MainActivity.java
  57. 30 0
      ThreadingServiceNoThread/AndroidManifest.xml
  58. BIN
      ThreadingServiceNoThread/ic_launcher-web.png
  59. BIN
      ThreadingServiceNoThread/res/drawable-hdpi/ic_launcher.png
  60. BIN
      ThreadingServiceNoThread/res/drawable-mdpi/ic_launcher.png
  61. BIN
      ThreadingServiceNoThread/res/drawable-xhdpi/ic_launcher.png
  62. BIN
      ThreadingServiceNoThread/res/drawable-xxhdpi/ic_launcher.png
  63. 15 0
      ThreadingServiceNoThread/res/layout/activity_main.xml
  64. 11 0
      ThreadingServiceNoThread/res/values-v11/styles.xml
  65. 12 0
      ThreadingServiceNoThread/res/values-v14/styles.xml
  66. 8 0
      ThreadingServiceNoThread/res/values/strings.xml
  67. 20 0
      ThreadingServiceNoThread/res/values/styles.xml
  68. 51 0
      ThreadingServiceNoThread/src/org/uab/android/threading/servicenothread/DownloadService.java
  69. 31 0
      ThreadingServiceNoThread/src/org/uab/android/threading/servicenothread/MainActivity.java
  70. 27 0
      ThreadingSimpleThread/AndroidManifest.xml
  71. BIN
      ThreadingSimpleThread/ic_launcher-web.png
  72. BIN
      ThreadingSimpleThread/libs/android-support-v4.jar
  73. BIN
      ThreadingSimpleThread/res/drawable-hdpi/grumpycat.jpg
  74. BIN
      ThreadingSimpleThread/res/drawable-hdpi/ic_launcher.png
  75. BIN
      ThreadingSimpleThread/res/drawable-mdpi/ic_launcher.png
  76. BIN
      ThreadingSimpleThread/res/drawable-xhdpi/ic_launcher.png
  77. BIN
      ThreadingSimpleThread/res/drawable-xxhdpi/ic_launcher.png
  78. 33 0
      ThreadingSimpleThread/res/layout/activity_main.xml
  79. 11 0
      ThreadingSimpleThread/res/values-v11/styles.xml
  80. 12 0
      ThreadingSimpleThread/res/values-v14/styles.xml
  81. 10 0
      ThreadingSimpleThread/res/values/strings.xml
  82. 20 0
      ThreadingSimpleThread/res/values/styles.xml
  83. 76 0
      ThreadingSimpleThread/src/org/uab/android/threading/simplethread/MainActivity.java
  84. 27 0
      ThreadingUIThread/AndroidManifest.xml
  85. BIN
      ThreadingUIThread/ic_launcher-web.png
  86. BIN
      ThreadingUIThread/libs/android-support-v4.jar
  87. BIN
      ThreadingUIThread/res/drawable-hdpi/grumpycat.jpg
  88. BIN
      ThreadingUIThread/res/drawable-hdpi/ic_launcher.png
  89. BIN
      ThreadingUIThread/res/drawable-mdpi/ic_launcher.png
  90. BIN
      ThreadingUIThread/res/drawable-xhdpi/ic_launcher.png
  91. BIN
      ThreadingUIThread/res/drawable-xxhdpi/ic_launcher.png
  92. 33 0
      ThreadingUIThread/res/layout/activity_main.xml
  93. 11 0
      ThreadingUIThread/res/values-v11/styles.xml
  94. 12 0
      ThreadingUIThread/res/values-v14/styles.xml
  95. 10 0
      ThreadingUIThread/res/values/strings.xml
  96. 20 0
      ThreadingUIThread/res/values/styles.xml
  97. 66 0
      ThreadingUIThread/src/org/uab/android/threading/uithread/MainActivity.java
  98. 27 0
      ThreadingViewPost/AndroidManifest.xml
  99. BIN
      ThreadingViewPost/ic_launcher-web.png
  100. BIN
      ThreadingViewPost/libs/android-support-v4.jar

+ 27 - 0
ThreadingAsyncTask/AndroidManifest.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.uab.android.threading.asynctask"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

BIN
ThreadingAsyncTask/ic_launcher-web.png


BIN
ThreadingAsyncTask/libs/android-support-v4.jar


BIN
ThreadingAsyncTask/res/drawable-hdpi/grumpycat.jpg


BIN
ThreadingAsyncTask/res/drawable-hdpi/ic_launcher.png


BIN
ThreadingAsyncTask/res/drawable-mdpi/ic_launcher.png


BIN
ThreadingAsyncTask/res/drawable-xhdpi/ic_launcher.png


BIN
ThreadingAsyncTask/res/drawable-xxhdpi/ic_launcher.png


+ 43 - 0
ThreadingAsyncTask/res/layout/activity_main.xml

@@ -0,0 +1,43 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="${relativePackage}.${activityClass}" >
+
+    <ImageView
+        android:id="@+id/imageView1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentRight="true"
+        android:layout_marginTop="20dp"
+        android:contentDescription="@string/grumpyCat" />
+    
+    <ProgressBar 
+        android:id="@+id/loadingView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"
+        android:layout_marginTop="20dp"
+        android:visibility="gone"
+        style="?android:attr/progressBarStyleHorizontal"/>
+
+    <Button
+        android:id="@+id/loadImage"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentLeft="true"
+        android:text="@string/load" />
+
+    <Button
+        android:id="@+id/sayhello"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_toRightOf="@+id/loadImage"
+        android:text="@string/sayhello" />
+
+</RelativeLayout>

+ 11 - 0
ThreadingAsyncTask/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
ThreadingAsyncTask/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 10 - 0
ThreadingAsyncTask/res/values/strings.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">ThreadingAsyncTask</string>
+    <string name="hello_world">Hello world!</string>
+    <string name="grumpyCat">Grumpy Cat</string>
+    <string name="load">Load image</string>
+    <string name="sayhello">Say hello</string>
+
+</resources>

+ 20 - 0
ThreadingAsyncTask/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 104 - 0
ThreadingAsyncTask/src/org/uab/android/threading/asynctask/MainActivity.java

@@ -0,0 +1,104 @@
+package org.uab.android.threading.asynctask;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.Toast;
+
+public class MainActivity extends Activity {
+	
+	Button		loadImageButton;
+	Button		sayHelloButton;
+	
+	ImageView	imageView;
+	ProgressBar	loadingView;
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_main);
+		
+		imageView = (ImageView) findViewById(R.id.imageView1);
+		loadingView = (ProgressBar) findViewById(R.id.loadingView);
+		
+		loadImageButton = (Button) findViewById(R.id.loadImage);
+		loadImageButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				// Create a new AsyncTask and pass it the image to load
+				new LoadingAsyncTask().execute(R.drawable.grumpycat);
+			}
+		});
+		
+		sayHelloButton = (Button) findViewById(R.id.sayhello);
+		sayHelloButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				Toast.makeText(MainActivity.this, "Hello class!",
+						Toast.LENGTH_SHORT).show();
+			}
+		});
+	}
+	
+	private class LoadingAsyncTask extends AsyncTask<Integer, Integer, Bitmap> {
+
+		@Override
+		protected void onPreExecute() {
+			
+			// Set the ProgressBar to indicate that the image is loading
+			loadingView.setVisibility(View.VISIBLE);
+		}
+		
+		@Override
+		protected Bitmap doInBackground(Integer... resId) {
+			
+			// Get a Bitmap from a drawable resource
+			Bitmap bitmapImage = BitmapFactory.decodeResource(getResources(), resId[0]);
+			
+			// Simulate long-running operation
+			for (int i = 1; i < 11; i++) {
+				sleep();
+				publishProgress(i * 10);
+			}
+			
+			return bitmapImage;
+		}
+		
+		@Override
+		protected void onProgressUpdate(Integer... values) {
+			
+			// Update the ProgressBar to show the image loading progress
+			loadingView.setProgress(values[0]);
+		}
+		
+		@Override
+		protected void onPostExecute(Bitmap result) {
+			
+			// Remove the ProgressBar from the View
+			loadingView.setVisibility(View.GONE);
+			
+			// Set the resulting bitmap as the ImageView's source
+			imageView.setImageBitmap(result);
+		}
+		
+		private void sleep() {
+			try {
+				Thread.sleep(500);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+		}
+		
+	}
+}

+ 27 - 0
ThreadingHandlerMessages/AndroidManifest.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.uab.android.threading.handlermessages"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

BIN
ThreadingHandlerMessages/ic_launcher-web.png


BIN
ThreadingHandlerMessages/libs/android-support-v4.jar


BIN
ThreadingHandlerMessages/res/drawable-hdpi/grumpycat.jpg


BIN
ThreadingHandlerMessages/res/drawable-hdpi/ic_launcher.png


BIN
ThreadingHandlerMessages/res/drawable-mdpi/ic_launcher.png


BIN
ThreadingHandlerMessages/res/drawable-xhdpi/ic_launcher.png


BIN
ThreadingHandlerMessages/res/drawable-xxhdpi/ic_launcher.png


+ 43 - 0
ThreadingHandlerMessages/res/layout/activity_main.xml

@@ -0,0 +1,43 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="${relativePackage}.${activityClass}" >
+
+    <ImageView
+        android:id="@+id/imageView1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentRight="true"
+        android:layout_marginTop="20dp"
+        android:contentDescription="@string/grumpyCat" />
+    
+    <ProgressBar 
+        android:id="@+id/loadingView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"
+        android:layout_marginTop="20dp"
+        android:visibility="gone"
+        style="?android:attr/progressBarStyleHorizontal"/>
+
+    <Button
+        android:id="@+id/loadImage"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentLeft="true"
+        android:text="@string/load" />
+
+    <Button
+        android:id="@+id/sayhello"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_toRightOf="@+id/loadImage"
+        android:text="@string/sayhello" />
+
+</RelativeLayout>

+ 11 - 0
ThreadingHandlerMessages/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
ThreadingHandlerMessages/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 10 - 0
ThreadingHandlerMessages/res/values/strings.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">ThreadingHandlerMessages</string>
+    <string name="hello_world">Hello world!</string>
+    <string name="grumpyCat">Grumpy Cat</string>
+    <string name="load">Load image</string>
+    <string name="sayhello">Say hello</string>
+
+</resources>

+ 20 - 0
ThreadingHandlerMessages/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 132 - 0
ThreadingHandlerMessages/src/org/uab/android/threading/handlermessages/MainActivity.java

@@ -0,0 +1,132 @@
+package org.uab.android.threading.handlermessages;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.Toast;
+
+public class MainActivity extends Activity {
+	
+	private static final int PROGRESS_BAR_VISIBILITY = 0;
+	private static final int PROGRESS_BAR_UPDATE = 1;
+	private static final int IMAGE_VIEW_SET_BITMAP = 2;
+	
+	Button		loadImageButton;
+	Button		sayHelloButton;
+	
+	ImageView	imageView;
+	ProgressBar	loadingView;
+	
+	Handler loadHandler = new Handler(new Handler.Callback() {
+		
+		@Override
+		public boolean handleMessage(Message msg) {
+			
+			switch (msg.what) {
+			case PROGRESS_BAR_VISIBILITY:
+				// Set the ProgressBar visibility
+				loadingView.setVisibility((Integer) msg.obj);
+				break;
+
+			case PROGRESS_BAR_UPDATE:
+				// Update the progress units in the ProgressBar
+				loadingView.setProgress((Integer) msg.obj);
+				break;
+				
+			case IMAGE_VIEW_SET_BITMAP:
+				// Set the ImageView's bitmap 
+				imageView.setImageBitmap((Bitmap) msg.obj);
+				break;
+			}
+			
+			return true;
+		}
+	});
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_main);
+		
+		imageView = (ImageView) findViewById(R.id.imageView1);
+		loadingView = (ProgressBar) findViewById(R.id.loadingView);
+		
+		loadImageButton = (Button) findViewById(R.id.loadImage);
+		loadImageButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				// Create a new Thread and pass it the Runnable to execute
+				new Thread(
+						new LoadingThread(loadHandler, R.drawable.grumpycat)
+						).start();
+			}
+		});
+		
+		sayHelloButton = (Button) findViewById(R.id.sayhello);
+		sayHelloButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				Toast.makeText(MainActivity.this, "Hello class!",
+						Toast.LENGTH_SHORT).show();
+			}
+		});
+	}
+	
+	private class LoadingThread implements Runnable {
+		
+		Handler 	handler;
+		int 		resId;
+		
+		public LoadingThread(Handler handler, int resId) {
+			this.handler = handler;
+			this.resId = resId;
+		}
+
+		@Override
+		public void run() {
+			
+			// Send a message indicating that the image is loading
+			Message msg = this.handler.obtainMessage(PROGRESS_BAR_VISIBILITY, View.VISIBLE);
+			this.handler.sendMessage(msg);
+			
+			// Get a Bitmap from a drawable resource
+			final Bitmap bitmapImage = BitmapFactory.decodeResource(getResources(), this.resId);
+			
+			// Simulate long-running operation
+			for (int i = 1; i < 11; i++) {
+				sleep();
+				msg = this.handler.obtainMessage(PROGRESS_BAR_UPDATE, i * 10);
+				this.handler.sendMessage(msg);
+			}
+			
+			// Send a message to hide the ProgressBar
+			msg = this.handler.obtainMessage(PROGRESS_BAR_VISIBILITY, View.GONE);
+			this.handler.sendMessage(msg);
+			
+			// Send a message to set the decoded bitmap as the ImageView's source
+			msg = this.handler.obtainMessage(IMAGE_VIEW_SET_BITMAP, bitmapImage);
+			this.handler.sendMessage(msg);
+		}
+		
+	}
+	
+	private void sleep() {
+		try {
+			Thread.sleep(500);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+	}
+}

+ 27 - 0
ThreadingHandlerRunnable/AndroidManifest.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.uab.android.threading.handlerrunnable"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

BIN
ThreadingHandlerRunnable/ic_launcher-web.png


BIN
ThreadingHandlerRunnable/libs/android-support-v4.jar


BIN
ThreadingHandlerRunnable/res/drawable-hdpi/grumpycat.jpg


BIN
ThreadingHandlerRunnable/res/drawable-hdpi/ic_launcher.png


BIN
ThreadingHandlerRunnable/res/drawable-mdpi/ic_launcher.png


BIN
ThreadingHandlerRunnable/res/drawable-xhdpi/ic_launcher.png


BIN
ThreadingHandlerRunnable/res/drawable-xxhdpi/ic_launcher.png


+ 43 - 0
ThreadingHandlerRunnable/res/layout/activity_main.xml

@@ -0,0 +1,43 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="${relativePackage}.${activityClass}" >
+
+    <ImageView
+        android:id="@+id/imageView1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentRight="true"
+        android:layout_marginTop="20dp"
+        android:contentDescription="@string/grumpyCat" />
+    
+    <ProgressBar 
+        android:id="@+id/loadingView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"
+        android:layout_marginTop="20dp"
+        android:visibility="gone"
+        style="?android:attr/progressBarStyleHorizontal"/>
+
+    <Button
+        android:id="@+id/loadImage"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentLeft="true"
+        android:text="@string/load" />
+
+    <Button
+        android:id="@+id/sayhello"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_toRightOf="@+id/loadImage"
+        android:text="@string/sayhello" />
+
+</RelativeLayout>

+ 11 - 0
ThreadingHandlerRunnable/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
ThreadingHandlerRunnable/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 10 - 0
ThreadingHandlerRunnable/res/values/strings.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">ThreadingHandlerRunnable</string>
+    <string name="hello_world">Hello world!</string>
+    <string name="grumpyCat">Grumpy Cat</string>
+    <string name="load">Load image</string>
+    <string name="sayhello">Say hello</string>
+
+</resources>

+ 20 - 0
ThreadingHandlerRunnable/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 121 - 0
ThreadingHandlerRunnable/src/org/uab/android/threading/handlerrunnable/MainActivity.java

@@ -0,0 +1,121 @@
+package org.uab.android.threading.handlerrunnable;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.os.Handler;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.Toast;
+
+public class MainActivity extends Activity {
+	
+	Button		loadImageButton;
+	Button		sayHelloButton;
+	
+	ImageView	imageView;
+	ProgressBar	loadingView;
+	
+	// Create a Handler object to process incoming operations from child threads
+	Handler		loadHandler = new Handler();
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_main);
+		
+		imageView = (ImageView) findViewById(R.id.imageView1);
+		loadingView = (ProgressBar) findViewById(R.id.loadingView);
+		
+		loadImageButton = (Button) findViewById(R.id.loadImage);
+		loadImageButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				// Create a new Thread and pass it the Runnable to execute
+				new Thread(
+						new LoadingThread(loadHandler, R.drawable.grumpycat)
+						).start();
+			}
+		});
+		
+		sayHelloButton = (Button) findViewById(R.id.sayhello);
+		sayHelloButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				Toast.makeText(MainActivity.this, "Hello class!",
+						Toast.LENGTH_SHORT).show();
+			}
+		});
+	}
+	
+	private class LoadingThread implements Runnable {
+		
+		Handler 	handler;
+		int 		resId;
+		
+		public LoadingThread(Handler handler, int resId) {
+			this.handler = handler;
+			this.resId = resId;
+		}
+
+		@Override
+		public void run() {
+			
+			// Set the ProgressBar indicating that the image is loading
+			this.handler.post(new Runnable() {
+				
+				@Override public void run() {
+					loadingView.setVisibility(View.VISIBLE);
+				}
+			});
+			
+			// Get a Bitmap from a drawable resource
+			final Bitmap bitmapImage = BitmapFactory.decodeResource(getResources(), this.resId);
+			
+			// Simulate long-running operation
+			for (int i = 1; i < 11; i++) {
+				sleep();
+				final int step = i;
+				handler.post(new Runnable() {
+					
+					@Override public void run() {
+						loadingView.setProgress(step * 10);
+					}
+				});
+			}
+			
+			// Hide the ProgressBar
+			this.handler.post(new Runnable() {
+				
+				@Override public void run() {
+					loadingView.setVisibility(View.GONE);
+				}
+			});
+			
+			// Set the decoded bitmap as the ImageView's source
+			this.handler.post(new Runnable() {
+				
+				@Override public void run() {
+					imageView.setImageBitmap(bitmapImage);
+				}
+			});
+		}
+		
+	}
+	
+	private void sleep() {
+		try {
+			Thread.sleep(500);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+	}
+}

+ 27 - 0
ThreadingRunOnUIThread/AndroidManifest.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.uab.android.threading.runonuithread"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name="org.uab.android.threading.runonuithread.MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

BIN
ThreadingRunOnUIThread/ic_launcher-web.png


BIN
ThreadingRunOnUIThread/libs/android-support-v4.jar


BIN
ThreadingRunOnUIThread/res/drawable-hdpi/grumpycat.jpg


BIN
ThreadingRunOnUIThread/res/drawable-hdpi/ic_launcher.png


BIN
ThreadingRunOnUIThread/res/drawable-mdpi/ic_launcher.png


BIN
ThreadingRunOnUIThread/res/drawable-xhdpi/ic_launcher.png


BIN
ThreadingRunOnUIThread/res/drawable-xxhdpi/ic_launcher.png


+ 44 - 0
ThreadingRunOnUIThread/res/layout/activity_main.xml

@@ -0,0 +1,44 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="${relativePackage}.${activityClass}" >
+
+    <ImageView
+        android:id="@+id/imageView1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentRight="true"
+        android:layout_marginTop="20dp"
+        android:contentDescription="@string/grumpyCat" />
+    
+    <ProgressBar 
+        android:id="@+id/loadingView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"
+        android:layout_marginTop="20dp"
+        android:indeterminate="true"
+        android:visibility="gone"
+        style="?android:attr/progressBarStyleLarge"/>
+
+    <Button
+        android:id="@+id/loadImage"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentLeft="true"
+        android:text="@string/load" />
+
+    <Button
+        android:id="@+id/sayhello"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_toRightOf="@+id/loadImage"
+        android:text="@string/sayhello" />
+
+</RelativeLayout>

+ 11 - 0
ThreadingRunOnUIThread/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
ThreadingRunOnUIThread/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 10 - 0
ThreadingRunOnUIThread/res/values/strings.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">ThreadingRunOnUIThread</string>
+    <string name="hello_world">Hello world!</string>
+    <string name="grumpyCat">Grumpy Cat</string>
+    <string name="load">Load image</string>
+    <string name="sayhello">Say hello</string>
+
+</resources>

+ 20 - 0
ThreadingRunOnUIThread/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 93 - 0
ThreadingRunOnUIThread/src/org/uab/android/threading/runonuithread/MainActivity.java

@@ -0,0 +1,93 @@
+package org.uab.android.threading.runonuithread;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.Toast;
+
+public class MainActivity extends Activity {
+	
+	Button		loadImageButton;
+	Button		sayHelloButton;
+	
+	ImageView	imageView;
+	ProgressBar	loadingView;
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_main);
+		
+		imageView = (ImageView) findViewById(R.id.imageView1);
+		loadingView = (ProgressBar) findViewById(R.id.loadingView);
+		
+		loadImageButton = (Button) findViewById(R.id.loadImage);
+		loadImageButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				loadImage();
+			}
+		});
+		
+		sayHelloButton = (Button) findViewById(R.id.sayhello);
+		sayHelloButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				Toast.makeText(MainActivity.this, "Hello class!",
+						Toast.LENGTH_SHORT).show();
+			}
+		});
+	}
+	
+	public void loadImage() {
+		
+		// Set the ProgressBar indicating that the image is loading
+		loadingView.setVisibility(View.VISIBLE);
+		
+		// Create a new Thread to load the image
+		new Thread(new Runnable() {
+			
+			@Override
+			public void run() {
+				
+				// Get a Bitmap from a drawable resource
+				final Bitmap bitmapImage = BitmapFactory.decodeResource(getResources(), R.drawable.grumpycat);
+				
+				// Simulate a long-running operation
+				try {
+					Thread.sleep(5000);
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+				
+				// Set the decoded bitmap as the ImageView's source
+				if ( bitmapImage != null ) {
+					
+					// The Activity.runOnUiThred() method runs in the UIThread
+					runOnUiThread(new Runnable() {
+						
+						@Override
+						public void run() {
+							
+							loadingView.setVisibility(View.GONE);
+							imageView.setImageBitmap(bitmapImage);
+						}
+					});
+				}
+					
+				
+			}
+		}).start(); // Executes the newly created thread
+		
+	}
+}

+ 30 - 0
ThreadingServiceNoThread/AndroidManifest.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.uab.android.threading.servicenothread"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        
+        <service 
+            android:name=".DownloadService"></service>
+    </application>
+
+</manifest>

BIN
ThreadingServiceNoThread/ic_launcher-web.png


BIN
ThreadingServiceNoThread/res/drawable-hdpi/ic_launcher.png


BIN
ThreadingServiceNoThread/res/drawable-mdpi/ic_launcher.png


BIN
ThreadingServiceNoThread/res/drawable-xhdpi/ic_launcher.png


BIN
ThreadingServiceNoThread/res/drawable-xxhdpi/ic_launcher.png


+ 15 - 0
ThreadingServiceNoThread/res/layout/activity_main.xml

@@ -0,0 +1,15 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="${relativePackage}.${activityClass}" >
+
+    <Button
+        android:id="@+id/button1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerHorizontal="true"
+        android:layout_centerVertical="true"
+        android:text="@string/download" />
+
+</RelativeLayout>

+ 11 - 0
ThreadingServiceNoThread/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
ThreadingServiceNoThread/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 8 - 0
ThreadingServiceNoThread/res/values/strings.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">ThreadingServiceNoThread</string>
+    <string name="hello_world">Hello world!</string>
+    <string name="download">Download file</string>
+
+</resources>

+ 20 - 0
ThreadingServiceNoThread/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 51 - 0
ThreadingServiceNoThread/src/org/uab/android/threading/servicenothread/DownloadService.java

@@ -0,0 +1,51 @@
+package org.uab.android.threading.servicenothread;
+
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.net.URL;
+
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.IBinder;
+import android.widget.Toast;
+
+public class DownloadService extends Service {
+
+	@Override
+	public int onStartCommand(Intent intent, int flags, int startId) {
+		
+		try {
+			URL url = new URL(
+					"http://www.gencat.cat/opendata/recursos/equipaments/equipaments.rdf"
+					);
+			InputStream inputStream = url.openConnection().getInputStream();
+
+			FileOutputStream fileOutputStream = 
+					openFileOutput("resultat.xml", Context.MODE_PRIVATE);
+			byte[] buffer = new byte[1024];
+			while ( (inputStream.read(buffer) > -1) )
+			{
+				fileOutputStream.write(buffer);
+			}
+
+			fileOutputStream.close();
+			inputStream.close();
+			
+			Toast.makeText(getBaseContext(), "Download complete!", Toast.LENGTH_SHORT)
+				.show();
+		}
+		catch (Exception e) { 
+			e.printStackTrace(); 
+		}
+		
+		return START_NOT_STICKY;
+	}
+	
+	@Override
+	public IBinder onBind(Intent intent) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+}

+ 31 - 0
ThreadingServiceNoThread/src/org/uab/android/threading/servicenothread/MainActivity.java

@@ -0,0 +1,31 @@
+package org.uab.android.threading.servicenothread;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+
+public class MainActivity extends Activity {
+
+	Button downloadFileButton;
+	
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_main);
+		
+		downloadFileButton = (Button) findViewById(R.id.button1);
+		downloadFileButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				// Start a Service to download a file
+				Intent downloadFileIntent = new Intent(MainActivity.this, DownloadService.class);
+				startService(downloadFileIntent);
+			}
+		});
+	}
+}

+ 27 - 0
ThreadingSimpleThread/AndroidManifest.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.uab.android.threading.simplethread"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

BIN
ThreadingSimpleThread/ic_launcher-web.png


BIN
ThreadingSimpleThread/libs/android-support-v4.jar


BIN
ThreadingSimpleThread/res/drawable-hdpi/grumpycat.jpg


BIN
ThreadingSimpleThread/res/drawable-hdpi/ic_launcher.png


BIN
ThreadingSimpleThread/res/drawable-mdpi/ic_launcher.png


BIN
ThreadingSimpleThread/res/drawable-xhdpi/ic_launcher.png


BIN
ThreadingSimpleThread/res/drawable-xxhdpi/ic_launcher.png


+ 33 - 0
ThreadingSimpleThread/res/layout/activity_main.xml

@@ -0,0 +1,33 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="${relativePackage}.${activityClass}" >
+
+    <ImageView
+        android:id="@+id/imageView1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentRight="true"
+        android:layout_marginTop="20dp"
+        android:contentDescription="@string/grumpyCat" />
+
+    <Button
+        android:id="@+id/loadImage"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentLeft="true"
+        android:text="@string/load" />
+
+    <Button
+        android:id="@+id/sayhello"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_toRightOf="@+id/loadImage"
+        android:text="@string/sayhello" />
+
+</RelativeLayout>

+ 11 - 0
ThreadingSimpleThread/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
ThreadingSimpleThread/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 10 - 0
ThreadingSimpleThread/res/values/strings.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">ThreadingSimpleThread</string>
+    <string name="hello_world">Hello world!</string>
+    <string name="grumpyCat">Grumpy Cat</string>
+    <string name="load">Load image</string>
+    <string name="sayhello">Say hello</string>
+
+</resources>

+ 20 - 0
ThreadingSimpleThread/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 76 - 0
ThreadingSimpleThread/src/org/uab/android/threading/simplethread/MainActivity.java

@@ -0,0 +1,76 @@
+package org.uab.android.threading.simplethread;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+public class MainActivity extends Activity {
+	
+	Button		loadImageButton;
+	Button		sayHelloButton;
+	
+	ImageView	imageView;
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_main);
+		
+		imageView = (ImageView) findViewById(R.id.imageView1);
+		
+		loadImageButton = (Button) findViewById(R.id.loadImage);
+		loadImageButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				loadImage();
+			}
+		});
+		
+		sayHelloButton = (Button) findViewById(R.id.sayhello);
+		sayHelloButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				Toast.makeText(MainActivity.this, "Hello class!",
+						Toast.LENGTH_SHORT).show();
+			}
+		});
+	}
+	
+	public void loadImage() {
+		
+		// Create a new Thread to load the image
+		new Thread(new Runnable() {
+			
+			@Override
+			public void run() {
+				
+				// Get a Bitmap from a drawable resource
+				final Bitmap bitmapImage = BitmapFactory.decodeResource(getResources(), R.drawable.grumpycat);
+				
+				// Simulate a long-running operation
+				try {
+					Thread.sleep(5000);
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+				
+				// Set the decoded bitmap as the ImageView's source
+				// This doen't work in Android
+				if ( bitmapImage != null ) 
+					imageView.setImageBitmap(bitmapImage);
+				
+			}
+		}).start(); // Executes the newly created thread
+		
+	}
+}

+ 27 - 0
ThreadingUIThread/AndroidManifest.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.uab.android.threading.uithread"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

BIN
ThreadingUIThread/ic_launcher-web.png


BIN
ThreadingUIThread/libs/android-support-v4.jar


BIN
ThreadingUIThread/res/drawable-hdpi/grumpycat.jpg


BIN
ThreadingUIThread/res/drawable-hdpi/ic_launcher.png


BIN
ThreadingUIThread/res/drawable-mdpi/ic_launcher.png


BIN
ThreadingUIThread/res/drawable-xhdpi/ic_launcher.png


BIN
ThreadingUIThread/res/drawable-xxhdpi/ic_launcher.png


+ 33 - 0
ThreadingUIThread/res/layout/activity_main.xml

@@ -0,0 +1,33 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="${relativePackage}.${activityClass}" >
+
+    <ImageView
+        android:id="@+id/imageView1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentRight="true"
+        android:layout_marginTop="20dp"
+        android:contentDescription="@string/grumpyCat" />
+
+    <Button
+        android:id="@+id/loadImage"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentLeft="true"
+        android:text="@string/load" />
+
+    <Button
+        android:id="@+id/sayhello"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_toRightOf="@+id/loadImage"
+        android:text="@string/sayhello" />
+
+</RelativeLayout>

+ 11 - 0
ThreadingUIThread/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
ThreadingUIThread/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 10 - 0
ThreadingUIThread/res/values/strings.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">ThreadingUIThread</string>
+    <string name="hello_world">Hello world!</string>
+    <string name="grumpyCat">Grumpy Cat</string>
+    <string name="load">Load image</string>
+    <string name="sayhello">Say hello</string>
+
+</resources>

+ 20 - 0
ThreadingUIThread/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 66 - 0
ThreadingUIThread/src/org/uab/android/threading/uithread/MainActivity.java

@@ -0,0 +1,66 @@
+package org.uab.android.threading.uithread;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+public class MainActivity extends Activity {
+	
+	Button		loadImageButton;
+	Button		sayHelloButton;
+	
+	ImageView	imageView;
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_main);
+		
+		imageView = (ImageView) findViewById(R.id.imageView1);
+		
+		loadImageButton = (Button) findViewById(R.id.loadImage);
+		loadImageButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				loadImage();
+			}
+		});
+		
+		sayHelloButton = (Button) findViewById(R.id.sayhello);
+		sayHelloButton.setOnClickListener(new OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				
+				Toast.makeText(MainActivity.this, "Hello class!",
+						Toast.LENGTH_SHORT).show();
+			}
+		});
+	}
+	
+	public void loadImage() {
+		
+		// Load image from drawable directory
+		Bitmap bitmapImage = BitmapFactory.decodeResource(getResources(), R.drawable.grumpycat);
+				
+		// Simulate a long-running operation
+		try {
+			Thread.sleep(5000);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+				
+		// Set the decoded bitmap as the ImageView's source
+		if ( bitmapImage != null ) 
+			imageView.setImageBitmap(bitmapImage);
+		
+	}
+}

+ 27 - 0
ThreadingViewPost/AndroidManifest.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.uab.android.threading.viewpost"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="14"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name="org.uab.android.threading.viewpost.MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

BIN
ThreadingViewPost/ic_launcher-web.png


BIN
ThreadingViewPost/libs/android-support-v4.jar


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác