File myFile = new File(folderPath + "/" + filename); //Getting URI Uri uri = Uri.fromFile(myFile); //Getting URL URL url=null; try { url = myFile.toURI().toURL(); } catch (MalformedURLException e) { e.printStackTrace(); }
String objects are immutable ( once created can not be changed ) and it will stored in the Constant String Pool , so if you chose to do a lot of manipulations with String objects, you will end up with a lot of abandoned String objects in the String pool. To avoiding this memory loss we can use StringBuilder or StringBuffer and can be modified over and over again without causing memory loss
StringBuffers are thread-safe, they have synchronized methods to control access so that only one thread can access a StringBuffer object’s synchronized code at a time. Thus, StringBuffer objects are generally safe to use in a multi-threaded environment where multiple threads may be trying to access the same StringBuffer object at the same time.
String from = "From : "; String to = " To : "; StringBuilder builder = new StringBuilder(); builder.append(from); builder.append("Manager"); builder.append(to); builder.append("Developer"); Log.i("Result : ", builder.toString());
StringBuilder’s access is not synchronized so that it is not thread-safe. The performance of StringBuilder can be better than StringBuffer. Thus, if you are working in a single-threaded environment, using StringBuilder instead of StringBuffer may result in increased performance.
String from = "From : "; String to = " To : "; String str = new StringBuffer() .append(from) .append("Manager") .append(to) .append("Developer") .toString(); Log.i("Result : ",str);
ref:
https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
https://docs.oracle.com/javase/tutorial/java/data/buffers.html
https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html
In Android we can set click listener by three ways
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.bm.buttonclickeg.MainActivity"> <Button android:id="@+id/btn_one" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button 1" /> <Button android:id="@+id/btn_two" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button 2" /> <Button android:id="@+id/btn_three" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="myBtnClick" android:text="Button 3" /> </LinearLayout>
In the above example btn_three I have added a property android:onClick=”myBtnClick” myBtnClick is a function I have defined in activiy
package com.example.bm.buttonclickeg; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //option 1 Button btn1 = (Button) findViewById(R.id.btn_one); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(MainActivity.this, "Created individual click listener", Toast.LENGTH_SHORT).show(); } }); //option 2 Button btn2 = (Button) findViewById(R.id.btn_two); btn2.setOnClickListener(this); } //option 2 @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_two: Toast.makeText(MainActivity.this, "Implemented click listener in activity", Toast.LENGTH_SHORT).show(); break; } } //option 3 // This function I have added in the btn_tree xml public void myBtnClick(View v) { Toast.makeText(MainActivity.this, "Created a separate function for handling button click and added this function in button xml", Toast.LENGTH_SHORT).show(); } }
In this sample code the myFuction() will call after 10 second
new Handler().postDelayed(new Runnable() { @Override public void run() { //your code here //you can add a block of code or a function cll myFunction(); } }, 10000); //setting 10 second delay : 1000 = 1 second
don't use Thread.sleep(10000);
because it will block your UI
In this function, we can pass class as parameter
Definition
/** * check the given service is running * @param serviceClass class eg MyService.class * @return boolean */ private boolean isMyServiceRunning(Class<?> serviceClass) { ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if (serviceClass.getName().equals(service.service.getClassName())) { return true; } } return false; }
Function call
isMyServiceRunning(MyService.class);
Here we can pass the class name with the package name
Definition
/** * check the given service is running * @param serviceClassname this shoul be the service class name with the package eg "com.example.eg.intentserviceexample.MyService" * @return boolean */ private boolean isMyServiceRunning(String serviceClassname) { //getting all the services ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { Log.i("debug", service.service.getClassName()); if (serviceClassname.equals(service.service.getClassName())) { return true; } } return false; }
calling the function
isMyServiceRunning("com.example.eg.intentserviceexample.MyService");
Simple intent service example click the link https://wiki.workassis.com/android-intentservice-example
Simple example for Android Intent Service and broadcast receiver
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.eg.intentserviceexample"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MyService" android:exported="false"/> </application> </manifest>
android:exported :- Whether or not components of other applications can invoke the service or interact with it — “true
” if they can, and “false
” if not. When the value is “false
“, only components of the same application or applications with the same user ID can start the service or bind to it. – developer.android.com
More about service tag click here
package com.example.eg.intentserviceexample; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //setting button click findViewById(R.id.btn_start_service).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Creating an intent for sending to service Intent intent = new Intent(getApplicationContext(), MyService.class); intent.putExtra("id", 101); intent.putExtra("msg", "hi"); //starting service startService(intent); } }); } @Override protected void onStart() { super.onStart(); //register broadcast receiver for the intent MyTaskStatus LocalBroadcastManager.getInstance(this).registerReceiver(MyReceiver, new IntentFilter("MyServiceStatus")); } //Defining broadcast receiver private BroadcastReceiver MyReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String message = intent.getStringExtra("serviceMessage"); Toast.makeText(MainActivity.this, "Received : " + message, Toast.LENGTH_SHORT).show(); } }; @Override protected void onStop() { super.onStop(); LocalBroadcastManager.getInstance(this).unregisterReceiver(MyReceiver); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.eg.intentserviceexample.MainActivity" android:orientation="vertical"> <Button android:id="@+id/btn_start_service" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start Service"/> </LinearLayout>
package com.example.eg.intentserviceexample; import android.app.IntentService; import android.content.Intent; import android.support.v4.content.LocalBroadcastManager; import android.util.Log; public class MyService extends IntentService { public MyService() { super(MyService.class.getName()); } @Override protected void onHandleIntent(Intent intent) { //retrieving data from the received intent int id = intent.getIntExtra("id",0); String message = intent.getStringExtra("msg"); Log.i("Data ", "id : "+id+" message : "+ message ); //----------------------------------------------- //Do your long running task here //------------------------------------------------ //Broadcasting some data Intent myIntent = new Intent("MyServiceStatus"); myIntent.putExtra("serviceMessage", "Task done"); // Send broadcast LocalBroadcastManager.getInstance(this).sendBroadcast(myIntent); } }
For How to check the service is running click the link : https://wiki.workassis.com/android-check-the-service-is-running
ref:
https://developer.android.com/reference/android/app/IntentService.html
https://developer.android.com/training/run-background-service/create-service.html
https://developer.android.com/guide/topics/manifest/service-element.html