android当前activity
① android 如何判断当前是哪个activity
当前的Activity只会有一个的
首先要知道Activity的四种状态:
Active/Runing 一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
Stoped 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped 状态。
Killed Activity 被系统杀死回收或者没有被启动时处于 Killed 状态。
protected void onStart() 该方法在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用,一般执行了onStart()后就执行onResume()。
protected void onResume() 在 Activity 从 Pause 状态转换到 Active 状态时被调用。
② android 返回键 关闭当前activity
重写ONKEYDOWN方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// Do something.
this.finish();//直接调用杀死当前activity方法.
return true;
}
return super.onKeyDown(keyCode, event);
}
我自己再尝试了一遍, 在多个activity之间用finish()还是没办法直接杀死程序
后面查阅了资料,在2.1之前可以使用ActivityManager的restartPackage方法。
它可以直接结束整个应用。在使用时需要权限android.permission.RESTART_PACKAGES。
在2.2添加了一个新的方法,killBackgroundProcesses(),需要权限android.permission.KILL_BACKGROUND_PROCESSES。
可惜的是,它和2.2的restartPackage一样,根本起不到应有的效果。
另外还有一个方法,就是系统自带的应用程序管理里,强制结束程序的方法,forceStopPackage()。
它需要权限android.permission.FORCE_STOP_PACKAGES。
并且需要添加android:sharedUserId="android.uid.system"属性
同样可惜的是,该方法是非公开的,他只能运行在系统进程,第三方程序无法调用。
所以只能用
Intent intent = new Intent();
intent.setClass(this, 主Activity的类);
startActivity(intent);
this.finish();
③ Android中判断当前处于哪个Activity
在每个activity中的onresume方法添加如下方法,就可以实现当前处于的是哪个activity:
java">@Override
protectedvoidonResume(){
super.onResume();
AppContext.getInstance().setCurrentActivity(this);
}
@Override
protectedvoidonPause(){
AppContext.getInstance().setCurrentActivity(null);
super.onPause();
}
@Override
publicvoidonDestroy(){
AppContext.getInstance().setCurrentActivity(null);
super.onDestroy();
}
然后在自己的app中:
importandroid.app.Activity;
importandroid.app.Application;
{
privateApplicationparentApp;
privateActivitycurActivity;
(){
returnparentApp;
}
privatestaticclassLazyHolder{
staticAppContextinstance=newAppContext();
}
(){
returnLazyHolder.instance;
}
@Override
publicbooleanStart(Map<String,Object>args){
Objectparam=args.get(appContext);
if(paraminstanceofApplication){
parentApp=(Application)param;
returntrue;
}
returnfalse;
}
@Override
publicvoidStop(Map<String,Object>args){
}
publicvoidsetCurrentActivity(ActivitycurActivity){
this.curActivity=curActivity;
}
(){
returnthis.curActivity;
}
(){
booleanisInAdapterActivity=false;
if(null!=curActivity){
if(){
isInAdapterActivity=true;
}
}
returnisInAdapterActivity;
}
publicbooleanisInScanActivity(){
booleanisInScanActivity=false;
if(null!=curActivity){
if(){
isInScanActivity=true;
}
}
returnisInScanActivity;
}
publicbooleanisInMainActivity(){
booleanisInMainActivity=false;
if(null!=curActivity){
if(){
isInMainActivity=true;
}
}
returnisInMainActivity;
}
}
然后在对应各个Activity:
if(AppContext.getInstance().isInMainActivity()){
//dosth.
}
④ 如何用adb shell 指令获得android当前的activity
(1)用“adb
shell
mpsys
activity”命令可以查看
(2)另外,用"adb
logcat
|
grep
ActivityManager",也可以查看当前正在运行的Activity
⑤ android 如何获取手机当前的Activity实例
获取activity实例有两种办法:
1、通过context来获取,简单方便:
private String getRunningActivityName() {
String contextString = context.toString();
return contextString.substring(contextString.lastIndexOf(".") + 1, contextString.indexOf("@"));
}
2、通过特定权限获取
<uses-permission android:name="android.permission.GET_TASKS" />
private String getRunningActivityName(){
ActivityManager activityManager=(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
String runningActivity=activityManager.getRunningTasks(1).get(0).topActivity.getClassName();
return runningActivity;
}
⑥ android里activity跳转时如何结束当前activity
Activity的跳转后面直接finish()就可以了。
比如从MainActivity跳到SecondActivity:
startActivity(new Intent(MainActivity.this, SecondActivity.class));
finish();
这样就行了
⑦ 如何获得当前的activity android
android开发中获取当前的Activity有多种情况;
在Activity中,this就是当前的Activity,例如this.startActivity。
在Fragment中可以通过 getActivity()来得到当前装载这个Fragment的Activity。
通过Activity堆栈来获取当前显示的这个Activity
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
⑧ 在android中,怎样刷新当前的activity
刷新activity的方法:
1. 刷新当前activity界面数据(手动刷新):
在activity类下新增一个refresh()方法:
/**
* 刷新, 这种刷新方法,只有一个Activity实例。
*/
public void refresh() {
onCreate(null);
}
2. 刷新另一个activity界面数据(自动刷新):
在涉及到sqlite3数据库操作的activity类下重写onResume()方法:(此处建议复习下activity的生命周期, 并了解下onResume()方法的使用)
/**
* 调用onCreate(), 目的是刷新数据,
* 从另一activity界面返回到该activity界面时, 此方法自动调用
*/
@Override
protected void onResume() {
super.onResume();
onCreate(null);
}
由此, 涉及到sqlite数据库数据的插入/更新/删除的activity的类, 建议像上面一样重写onResume()方法, 这是本人在实践中解决"刷新另一activity界面数据"的可行方法
⑨ android 判断当前在哪个activity界面
需要在哪里判断呢, Activity中, this或者context就是当前界面,如果是在service中要获取当前activity, 那就要用packageManager来判断
⑩ 安卓 当前activity的引用怎么传递
一种是像楼主所说的,在Activity里注册一个BroadcastReceiver,Service完成某个任务就可以发一个广播,接收器收到广播后通知activity做相应的操作。 另一种是,使用bindService来关联Service和Application,应用.apk里的所有组件一般情况都运行在同一个进程中,所以不需要用到IPC,bindService成功后,Service的Client可以得到Service返回的一个iBinder引用,具体的参见Service的文档及onBind的例子,这样Service的引用就可以通过返回的iBinder对象得到,如 public class LocalService extends Service { // This is the object that receives interactions from clients. See // RemoteService for a more complete example. private final IBinder mBinder = new LocalBinder(); public class LocalBinder extends Binder { LocalService getService() { return LocalService.this; } } @Override public IBinder onBind(Intent intent) { return mBinder; } } 之后Client通过这个iBinder对象得到Service对象引用之后,可以直接和Service通讯,比如读取Service中的值或是调用Service的方法。