I am a highly experienced Mobile App Developer with 12+ years of experience in developing mobile applications for Android and other platforms. I have extensive knowledge of mobile application development tools such as Android, Flutter/dart, and Core Android. I have a proven track record of delivering high quality mobile applications on time and within budget. My expertise also includes integration of various third party APIs for mobile applications. I am always looking for new challenges and opportunities to expand my skill set and further improve my knowledge and experience.
Android MDM Specialist / Lead Developer
HCLTech Lead
Accion Labs India Private LimitedModule Lead
Photon Interactive Pvt LtdSenior Software Engineer
LG Soft India Pvt. Ltd.Senior Software Engineer
mPortal India Pvt. Ltd.Technology Specialist
Cognizant Technology Solutions Pvt LtdSoftware Engineer
Gemalto cards and terminalsJava
Kotlin
Dart
REST API
Git
Ethereum
Android SDK
XML
Gradle
Android Studio
RESTful APIs
Firebase Cloud Messaging
Mockito
Glide
Eclipse
SVN
ADB
Clear Case
Room
Kotlin Coroutines
JUnit
Espresso
SonarQube
Can you help help me understand about your background? I gave you a brief introduction. Yeah. Uh, my introduction, uh, would would be like this, that I'm a senior I recognize myself as a senior Android, uh, developer. Uh, I have played a architect role in designing, developing, and also refactoring the code, and also, you know, we we have also, Uh, engaged, you know, in in client or stakeholders, uh, meetings where I have to convert their requirement into the code Uh, and, uh, split the code or split the requirement into smaller tasks and submit the POCs for that, Uh, and then assign the task to the junior resources and also train them. So I also have acted as an individual contributor. Uh, I've, uh, I've also worked on a team of 10. So this is how my role goes.
How would you prevent an ANR from occurring? Basically, ANR is application not responding. So it usually happens when you hold a, uh, UI thread for more than 5 seconds. So, uh, any large tasks for any long operations that you want to do. Basically, you can, uh, do it in the separate thread. And today, I think, uh, we have, uh, coroutines, uh, where we can run the coroutines on, uh, different dispatches. 1 is IO, One is main and one is default. So by doing this, I think, you know, you can avoid, uh, the ANR problem.
So, basically, if you want to reuse a UI component, you can, uh, create a separate XML files. Okay? And then you can include those XML files, which you think which can be used in many other places. And, also, if there are certain, uh, UI components that you think, you know, that can be reused, You can make it as a separate, uh, XML, and then, uh, you could start including those XML into the, uh, into the actual, you know, uh, XML code that you write. So if you're writing a main activity, so you can have some Sub, uh, XML, you know, and then you can include those here. Uh, also, you can use themes. You can use styling. Okay. And all these things, you know, you can use where you think, you know, uh, there are certain components that can be reused. So break it into small you know, in a very, uh, high level summary, break it into smaller components and keep it as a separate to the XMS. When you require this, you can include that, you know, as a, uh, include that in the main, uh, XML that you want.
So, basically, if you want to secure a, um, your data and SQLite, you can use, um, AES, uh, encryptions. You know? So you can encrypt the data and, uh, keep it in the in the SQL. And whenever you want to, you Use it. You know? You can decrypt it and use it. And so in that way, uh, usually, you can protect your data. Uh, if you want, See, basically, when you look at, uh, any, uh, Android application, it is into a sandboxing. So it will maintain a different, Uh, SQL lite. Okay? Uh, so when you're giving access to, uh, to outside the application, we usually use, uh, content providers earlier so that it used to have a secure way of, you know, giving the, uh, access to the SQLite. If that is not required, if you don't want to share your data to anybody, then encrypt the whole XML and keep it, uh, and, uh, apply the SQL, uh
So there are many profiling tools, you know, that you can use. Uh, actually, today, you can see, uh, you have the profiler. Okay. You have in the Android Studio, we have profiler for network. You have profiler for, um, for, the battery you said. Your profiler for memory, and, uh, you have a profiler, you know, to check your, uh, UI. So you have different profilers. So what you can do is when you create an application, you can run the profilers. So if, uh, let me take an example of, you know, thread. So say suppose, um, uh, a particular UI is very slow, uh, first thing is we look at the hierarchy URL and see if there is any, uh, load that is taken. We have do any nesting. Once we do that, you know, later, we go into the memory profiler, and we see if there is any a memory leaks that is happening. 3rd thing is that, uh, the systrace. So, uh, so we use that, uh, to check if there's any overloading of the threads, and then we can partition that. Or we can, uh, load the, uh, or we can load the work on the thread, and we can, uh, put it on a different thread. You know? So all this profiling, we can do, you know, and, uh, and we can see, you know, uh, whether, uh, the app is running efficiently. And, uh, also, Uh, what I believe here today is, uh, we have to have a single responsibility for every classes that we create in such a way, uh, so that, you know, we don't define multiple tasks in one particular, uh, class. We can Split those responsibilities to different classes so that in this way, you know, you can reduce the, um, responsibility on each and every task.
Outline steps to migrate an existing Java. Uh, so if you want to migrate an existing Java placed application, uh, we use, uh, the, um, uh, what do you call? Uh, we use this particular, um, I'm not getting this word. I mean, what do you call? We use Kotlin based, you know, um, uh, extensions, uh, where you can add those. Um, so, uh, it's like, uh, what, um, uh, I'm not able to think about that. Probably, I have to see. Um, uh, I'm just thinking, you know, what is the right way to do it? Um, I'm not getting this correct, you know, statement uh, on this. So I want to skip this question. Um, uh, okay. I I want to skip this question.
Uh, consider the below Java code center. Can you identify this? Okay. So, basically, it is, uh, well, you can see this is HTTPS, Uh, which is missing. Uh, it's a plain text that you're sending. So that is one of the security. Android security. Can you identify the issue related to Android security? Yeah. 1 is this, My web load URL, you know, uh, is not secured by because it's a plain old HTTPS. HTTP, uh, sort of, you know, think so that is what I can identify from here. So we need to use HTTPS for most secure way of, uh, loading the URL.
Please interpret the below code, which perform the. Alright. The database. Basically, this adding values, you know, it's inserting values to the table. And, uh, yeah, it's inserting values to the table, and then it's closing the, uh, the database connection.
How do you implement error handling strategies to handle how do you implement error handling strategies? So how do you implement the error handling strategies to handle network volatility in an Android So, basically, when you are working with the network, what you can do is, uh, initially, you can see, you know, the read that that, uh, the disconnect time? You know? So once you have made a request, uh, you can see, uh, if the if the request has happened. And if the request is not happening, uh, or if they're not getting any responses, we need to disconnect the, um, that particular session and report it back to the user. Uh, another way of volatility is to check. So, say, suppose you are running some task, uh, you can you can check for the network connectivity in your code. When there is a disruption of the network connectivity, you need to basically, uh, report it back on the UI telling that the network has disconnected or you're offline. So, basically, you observe this on YouTube and things like that, right, when you're watching. And if there's no network, so you can you can identify you can use a network class or the services network services? So you can get, say, get system services for the network and identify that Change in network. If there is a known network, then you basically report it back to the, uh, the the to the UI. And that in that way, you know, you can Make, uh, this network stable. Uh, also, you know, you can you can just juggle around with. Uh, if there is no connection on Wi Fi, you know, you can move back to your, uh, normal, SIM based or network based. No? So if Wi Fi is connected with you and all that, you have to just connect it back to the mobile.
How do you manage how do you manage the condensation and algorithm? So, basically, when you're, um, managing your network dependency injection, right, so you can add the dependency dependency injection in a common Right? So you need to maintain a common file, uh, so that whenever you are including a dependency, so what you can do is you can maintain say, suppose you are in repository, right, and you want to you can maintain a normal repository, Uh, or normal, uh, where you can just add that dependency there. So if somebody is working on a different repository? He can also include that file there. So when you're building, uh, you can see what are the different, uh, dependencies that, uh, people are having. If any dependency, uh, is already present, you can reuse the you don't have to declare the dependency again. In this fashion, you can manage the dependency across the application, so you need to maintain it as a common. Like, say, uh, on on view model, you know, there is a dependency. I would add it in a common file. Repository, there's a when you're developing a repository, you can add it as a common file. That's where all the dependency sits. Uh, so in this fashion, you know, so you can you can see that, you know, your dependency will not get duplicated, and you can maintain the, uh, dependency across the app.
How would you apply ProGuard RS? So, basically, RS or ProGuard, you know, is, uh, on is on the, uh, in is on the Gradle file. You know? So you need to enable, uh, the, uh, prog ProGuard uh, an RS on the on the, um, Gradle file. And then when you're building assigned application, it will get, uh, duplicated, uh, and, uh, the RS can be applied there. I mean, uh, yeah, pretty much.
What is, uh, what is your experience with Git for branching, merging, resolving conflicts in Gong? So, basically, every Git is a common repository that we all have. It's a code repository. Uh, so the way we can manage it is, uh, whenever you want to develop a feature, You can, uh, create a, uh, we can branch out of the main. So you have a develop branch. So you branch out of that, Create a different branch, uh, for your particular feature. Once you complete that feature, you can commit that particular branch back to, uh, the, uh, back to that, um, I mean, you can commit your code to the branch and push it to the, uh, the to the git. So once you push it, you need to raise a PR where people will review your branch. And if there's any, uh, review comments, fix the review comments, and then, you know, commit it back to the develop.