Przeglądaj źródła

Initial commit for Threading related projects.

Cristian Tanas 11 lat temu
rodzic
commit
e765e29330
100 zmienionych plików z 1516 dodań i 0 usunięć
  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


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików