吴嘉俊(Stef)高级讲师
拥有多年的Java开发经验,CTO,EasyJF开源团队创始人之一、负责 EasyJWeb项目的开发和维护。曾在国内多家大型软件公司负责公司内部框架的开发和维护,为多个大中型公司做过架构和技术咨询。曾组织开发了蓝源 装饰行业ERP、美国EMR、蓝源服装行业连锁管理系统、蓝源SaaS服务平台、蓝源Eloan互联网金融综合解决方案等系统产品。具有非常丰富项目开发和 管理经验。
擅长技术:主流JavaEE,Android技术,对 Spring、JPA、Hibernate、 MyBatis、Struts2、MongoDB、Redis等技术领域有深入研究。
吴老师有丰富的Java培训经验和IT培训行业顾问经验;授课激情,有感染力 ,注重对底层原理的剖析和理解;善于培养学生对编程的兴趣;
Java工程师的工资待遇怎么样?
Java工程师的工资待遇怎么样?
Java软件工程师一般月薪范围在4000-10000元,远远超过了应届毕业生月薪 2500元的平均水平。通常来说,有一年工作经验的Java高级软件工程师的薪酬大致在年薪10—13万左右。
从Java的应用领域来分,Java语言的应用方向主要表现在以下三个方面:首 先是大中型的商业应用;其次是桌面应用,就是常说的C/S应用;再次是移动领域应用。
综上而言JAVA就业方向为:可以从事JSP网站开发、Java编程、Java游戏开 发、Java桌面程序设计,以及其他与Java语言编程相关的工作。可进入电信、银行、保险专业软件开发公司等从事软件设计和开发工作。
Java基础语法
Java基础语法
Java基础语法
流程控制语句
Java 编译器执行流程
if 分支结构
switch 选择结构与相关规则
循环结构
for 循环
while 循环
do-while 循环语句
各语句性能对比与应用场景
特殊流程控制语句
方法的声明与使用
方法调用的过程分析
跨类调用方法
参数的值传递
方法的重载 Overload
2种判断(获取)栈顶activity的方法
>
有时候,需要获取当前位于栈顶的activity的实例。这里介绍2种方法,以及各自适用的场景。**后有demo测试数据以供参考
**种方法:获取栈顶activity的实例 应用场景:项目中,activity都继承于一个BaseActivity,在这个base中,有个广播接收器,收到广播,就弹出一个dialog。现打开多个activity,这个时候,**三方推送等方法,发出一个广播,base接收到。因为只需要在栈顶的activity弹出,而不是每个activity都弹出,所以,需要获取栈顶activity的实例(即上下文,传给dialog的构造方法),而不能简单的传个this,否则,会导致每个activity都有dialog弹出。
获取方法: 在application中:
public class MyApplication extends Application { PRivate static MyApplication mInstance; private Activity app_activity = null; @Override public void onCreate() { super.onCreate(); mInstance = this; initGlobeActivity(); } private void initGlobeActivity() { registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { app_activity = activity; Log.e("onActivityCreated===", app_activity ""); } @Override public void onActivityDestroyed(Activity activity) { app_activity = activity; Log.e("onActivityDestroyed===", app_activity ""); } /** Unused implementation **/ @Override public void onActivityStarted(Activity activity) { app_activity = activity; Log.e("onActivityStarted===", app_activity ""); } @Override public void onActivityResumed(Activity activity) { app_activity = activity; Log.e("onActivityResumed===", app_activity ""); } @Override public void onActivityPaused(Activity activity) { app_activity = activity; Log.e("onActivityPaused===", app_activity ""); } @Override public void onActivityStopped(Activity activity) { app_activity = activity; Log.e("onActivityStopped===", app_activity ""); } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } }); } /** * 获取实例 * @return */ public static MyApplication getInstance() { return mInstance; } /** * 公开方法,外部可** MyApplication.getInstance().getCurrentActivity() 获取到当前**上层的activity */ public Activity getCurrentActivity() { return app_activity; } }注意:initGlobeActivity()、getInstance()、getCurrentActivity() 这3个方法
使用方法: 在base的展示dialog方法中:
Activity currentActivity = MyApplication.getInstance().getCurrentActivity(); Dialog dialog = new Dialog(currentActivity, R.style.PushDialog);————————————————————————————————–
第二种方法:获取栈顶activity的完整包名 应用场景:仅仅为了判断当前activity是不是在栈顶,以便决定要不要弹toast等等。 注意:获取到的仅仅是完整包名,判断当前activity在不在栈顶,需要用到String方法中的contains方法等。这个时候需要注意,以免出错。如:栈顶activity名为AB,里面包含A,就认为A是在栈顶,就出错了。**好这个activity的名字很特殊,和其他的没有重合部分
在工具类中创建方法:
/** * 获得栈中**顶层的Activity * * @param context * @return */ public static String getTopActivity(Context context) { android.app.ActivityManager manager = (android.app.ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1); if (runningTaskInfos != null) { return (runningTaskInfos.get(0).topActivity).toString(); } else return null; }使用:
String topActivity_1 = Util.getTopActivity(this); Log.e("topActivity_1", topActivity_1);测试数据: 现有3个activity:MainActivity_1、MainActivity_2、MainActivity_3 **个中有按钮,点击跳转到第二个,第二个中有按钮,点击跳转到第三个 代码:
package com.chen.demo; import android.app.Activity; import android.os.Bundle; import android.view.Window; /** * 基础Activity */ public abstract class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //不显示title requestWindowFeature(Window.FEATURE__TITLE); initview(); } abstract void initview(); } package com.chen.demo; import android.content.Intent; import android.util.Log; import android.view.View; import android.widget.TextView; public class MainActivity_1 extends BaseActivity { TextView tv; @Override void initview() { setContentView(R.layout.activity_main_1); String topActivity_1 = Util.getTopActivity(this); Log.e("topActivity_1", topActivity_1); tv = (TextView) findViewById(R.id.tv); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MainActivity_1.this.startActivity(new Intent(MainActivity_1.this, MainActivity_2.class)); } }); } } import android.content.Intent; import android.util.Log; import android.view.View; import android.widget.TextView; public class MainActivity_2 extends BaseActivity { TextView tv_2; @Override void initview() { setContentView(R.layout.activity_main_2); String topActivity_2 = Util.getTopActivity(this); Log.e("topActivity_2", topActivity_2); tv_2 = (TextView) findViewById(R.id.tv_2); tv_2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MainActivity_2.this.startActivity(new Intent(MainActivity_2.this, MainActivity_3.class)); } }); } } package com.chen.demo; import android.util.Log; public class MainActivity_3 extends BaseActivity { @Override void initview() { setContentView(R.layout.activity_main_3); String topActivity_3 = Util.getTopActivity(this); Log.e("topActivity_3", topActivity_3); } }日志:
程序刚启动 02-24 10:56:12.997 13043-13043/com.chen.demo E/onActivityCreated===: com.chen.demo.MainActivity_1@eff3d78 02-24 10:56:13.030 13043-13043/com.chen.demo E/topActivity_1: ComponentInfo{com.chen.demo/com.chen.demo.MainActivity_1} 02-24 10:56:13.032 13043-13043/com.chen.demo E/onActivityStarted===: com.chen.demo.MainActivity_1@eff3d78 02-24 10:56:13.032 13043-13043/com.chen.demo E/onActivityResumed===: com.chen.demo.MainActivity_1@eff3d78 点击MainActivity_1中按钮去往MainActivity_2 02-24 10:56:47.692 13043-13043/com.chen.demo E/onActivityPaused===: com.chen.demo.MainActivity_1@eff3d78 02-24 10:56:47.718 13043-13043/com.chen.demo E/onActivityCreated===: com.chen.demo.MainActivity_2@53c82a7 02-24 10:56:47.722 13043-13043/com.chen.demo E/topActivity_2: ComponentInfo{com.chen.demo/com.chen.demo.MainActivity_2} 02-24 10:56:47.724 13043-13043/com.chen.demo E/onActivityStarted===: com.chen.demo.MainActivity_2@53c82a7 02-24 10:56:47.724 13043-13043/com.chen.demo E/onActivityResumed===: com.chen.demo.MainActivity_2@53c82a7 02-24 10:56:48.099 13043-13043/com.chen.demo E/onActivityStopped===: com.chen.demo.MainActivity_1@eff3d78 点击MainActivity_2中按钮去往MainActivity_3 02-24 10:57:21.984 13043-13043/com.chen.demo E/onActivityPaused===: com.chen.demo.MainActivity_2@53c82a7 02-24 10:57:21.999 13043-13043/com.chen.demo E/onActivityCreated===: com.chen.demo.MainActivity_3@f2b18ec 02-24 10:57:22.003 13043-13043/com.chen.demo E/topActivity_3: ComponentInfo{com.chen.demo/com.chen.demo.MainActivity_3} 02-24 10:57:22.003 13043-13043/com.chen.demo E/onActivityStarted===: com.chen.demo.MainActivity_3@f2b18ec 02-24 10:57:22.003 13043-13043/com.chen.demo E/onActivityResumed===: com.chen.demo.MainActivity_3@f2b18ec 02-24 10:57:22.382 13043-13043/com.chen.demo E/onActivityStopped===: com.chen.demo.MainActivity_2@53c82a7
相关推荐: